我有这种情况。我正在使用Page Object设计模式在Selenium Webdriver,TestNG中构建测试框架。 我有以下情况。我不知道如何在我的框架中处理这个问题。
我在网页中有Webelement(文本框),其位置会根据特定条件而改变。我附上了截图,以便更好地理解。
我正在尝试输入下面的文本框"数量(目标数量)"上面的截图中的字段。实际上它是一个表。但是"数量(目标数量)" &安培;它下面的文本框会根据某些情况而改变。请参见下面的屏幕截图。
使用Page Object设计模式处理此问题的最佳方法是什么?
我想做以下事。
将表的所有元素放在列表中。
迭代列表寻找"数量(目标数量)"。当你得到它时,在下面的文本框中输入输入。
答案 0 :(得分:0)
由于您尚未发布HTML,我将提供一个大致的想法,以防他们没有固定ID。
假设您之间可能有不同数量的列:
<td>
元素具有'数量(目标数量)'。别忘了保持一个
计数器。)这将让您了解“MPN”和“数量(目标数量)”之间存在多少列。
现在,假设两者之间有'n'列。遍历行(标题下方),然后转到'n'元素。如果这些是<td>
代码,请转到第二个<td>
中的第n个<tr>
项,然后搜索输入框。
假设其间的列数始终为2或3(如屏幕截图所示),请跳过上面的步骤1直接转到步骤3.
答案 1 :(得分:0)
由于您尚未发布该网页的HTML,因此很难制定出适合您的答案,但我编写了一个示例HTML表here XPath和一些代码应该有帮助作为一个例子。
此方法接受行和列标签,并返回引用单元格中包含的文本。
public String getTextFromTable(String rowLabel, String columnLabel)
{
return driver.findElement(By.xpath("//table/tbody/tr[count(//tr/th[.='" + columnLabel + "']/preceding::tr) - 1]/td[count(//th[.='"
+ rowLabel + "']/preceding-sibling::th)]")).getText();
}
你会称之为
getTextFromTable("Height", "Taipei 101");
此方法使用count()
来计算所需标签之前的行数或列数。然后,它将该计数用作TR
或TH
集合的索引,以查找所需的元素。
现在,在您的情况下,您将编写一个方法作为包含该表的页面对象的一部分。这将需要两个参数,列标签(&#34;数量(目标数量)和#34;)和输入String
。它将使用类似于上面的示例函数的方法来查找列索引,然后找到输入字符串的INPUT
和sendKeys()
。