我必须使用Selenium测试一些复杂的Web服务。
问题是id
个元素在会话之间发生了变化
例如,有一堆输入每个都有id
,前缀为textf_id_DComboBox_
,并以连续的数字结尾,起始编号是随机的(取决于会话)。
那些输入没有共同的父级,因此nth-child
不起作用。\
我可以使用选择器css=input[id^='textf_id_DComboBox_']
找到第一个输入,但我不知道如何找到与此选择器匹配的下一个项目(1-7)。
我在stackoverflow上找到了一些应该使用xpath
选择器的建议,但我无法为我的用例采用示例。
更新:
我还有另一个选择器,它捕获第一个输入:css=td.DForm_treeGridNoWrap input
。
答案 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
的健康实例