-2

我必须使用 Selenium 测试一些复杂的 Web 服务。

问题是id元素的 s 在会话之间发生变化。
例如,有一堆输入,每个都有id前缀textf_id_DComboBox_并以连续数字结尾,起始数字是随机的(取决于会话)。
这些输入没有共同的父级,因此nth-child不起作用。\

我可以使用选择器找到第一个输入css=input[id^='textf_id_DComboBox_']:但我不知道如何找到与此选择器匹配的下一个项目(1-7)。我在 stackoverflow 上找到了一些xpath应该使用选择器的建议,但我无法为我的用例采用示例。

更新
我还有捕获第一个输入的替代选择器:css=td.DForm_treeGridNoWrap input

4

2 回答 2

1

您可以使用此 XPath 来选择包含公共 id 的所有输入:

string comboBoxXPath = "//input[contains(@id, 'textf_id_DComboBox')]";
List<WebElement> comboBoxElements = driver.findElements(By.XPath(comboBoxXPath));

此时,您可以遍历整个集合,也可以使用索引选择要与之交互的集合:

comboBoxElements[1]
comboBoxElements[2]
comboBoxElements[3]

etc...
于 2012-08-06T20:49:50.867 回答
0

好吧,这种描述并没有太大帮助。你可以试试这些技巧:

  • 你可以调用findElement这个WebElement技巧可能不起作用,因为这些 ID 没有共同的父级。但是如果它们被包装在表格中,你可以先找到表格:

     WebElement table = driver.findElement(By.id("the-table"));
    

然后在该表中查找所有输入:

      List<WebElement> inputs = table.findElements(By.tagName("input"));
  • 将 Selenium IDE 安装到您的 firefox 并尝试使用它来记录测试用例。您可以在 Selenium IDE 中使用目标。

  • 肮脏的方法

       List<WebElement> allInputs = driver.findElements(By.tagName("input"));
    

    将在此类页面中找到所有输入。

脚注:代码是 Java 并且driver变量被认为是健康的实例WebDriver

于 2012-08-06T17:30:07.357 回答