如何处理这个webelement?

时间:2017-08-17 05:42:04

标签: java selenium

我有这种情况。我正在使用Page Object设计模式在Selenium Webdriver,TestNG中构建测试框架。 我有以下情况。我不知道如何在我的框架中处理这个问题。

我在网页中有Webelement(文本框),其位置会根据特定条件而改变。我附上了截图,以便更好地理解。ScreenShot-1

我正在尝试输入下面的文本框"数量(目标数量)"上面的截图中的字段。实际上它是一个表。但是"数量(目标数量)" &安培;它下面的文本框会根据某些情况而改变。请参见下面的屏幕截图。

Screenshot2

使用Page Object设计模式处理此问题的最佳方法是什么?

我想做以下事。

  • 将表的所有元素放在列表中。

  • 迭代列表寻找"数量(目标数量)"。当你得到它时,在下面的文本框中输入输入。

2 个答案:

答案 0 :(得分:0)

由于您尚未发布HTML,我将提供一个大致的想法,以防他们没有固定ID。

假设您之间可能有不同数量的列:

  1. 通过标题('MPN','CPN'等)迭代找到位置 标题为“数量(目标数量)”。 (遍历行,然后检查 哪个<td>元素具有'数量(目标数量)'。别忘了保持一个 计数器。)
  2. 这将让您了解“MPN”和“数量(目标数量)”之间存在多少列。

  3. 现在,假设两者之间有'n'列。遍历行(标题下方),然后转到'n'元素。如果这些是<td>代码,请转到第二个<td>中的第n个<tr>项,然后搜索输入框。

  4. 假设其间的列数始终为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()来计算所需标签之前的行数或列数。然后,它将该计数用作TRTH集合的索引,以查找所需的元素。

现在,在您的情况下,您将编写一个方法作为包含该表的页面对象的一部分。这将需要两个参数,列标签(&#34;数量(目标数量)和#34;)和输入String。它将使用类似于上面的示例函数的方法来查找列索引,然后找到输入字符串的INPUTsendKeys()