Selenium nth匹配id没有共同父级

时间:2012-08-06 15:08:33

标签: selenium css-selectors

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

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

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

更新
我还有另一个选择器,它捕获第一个输入:css=td.DForm_treeGridNoWrap input

2 个答案:

答案 0 :(得分: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...

答案 1 :(得分: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的健康实例