我对ByChained类的文档中提到的内容非常困惑。它说:
用于使用一系列其他查找在文档中定位元素的机制。此类将找到按顺序与每个定位器匹配的所有DOM元素,例如driver.findElements(new ByChained(by1,by2))将找到与by2匹配的所有元素,并出现在与by1匹配的元素下面。
selenium在code.google.com上也存在一个问题,该问题是为ByChained类提出的,有人在评论中说,它旨在用于通过多个定位符查找元素/元素。
我不明白 为什么by1和by2是两个不同元素的定位符?当我初次接触该类时,我觉得它将通过使用不同的定位器来帮助定位元素。因此,如果一个定位器不起作用,则下一个定位器将起作用。但是,当我实际使用此类时,它的行为非常奇怪,并一直抛出NoSuchElementException。
例如,如果我的html是:
<html> <body> <div id="details"> <input id="firstName" class="personName" type="text"/> </div> </body> </html>
我想在ByChained中使用两个定位符来查找输入字段: 1.使用By.id("firstName") 2.使用By.className("personName")
By.id("firstName")
By.className("personName")
所以我的代码变成:
By myBy = new ByChained(By.id("firstName"),By.className("personName")); driver.findElement(myBy);
在执行时,我得到了NoSuchElementException。我期望如果我的第一个By不起作用,那么它将在系列中找到带有下一个By的元素。
有人可以通过一个示例解释此类的工作原理,以及可以在哪种情况下使用该类吗?
此类的作用是允许您使用dom中的层次结构来定位元素。
可以说由于某种原因您拥有以下html:
<html> <body> <div id="details"> <input id="firstName" class="personName" type="text"/> </div> <input id="firstName" class="personName" type="text"/> </body> </html>
并且您想要获得div之间的元素,而不是单独获得的元素。您可以使用ByChained by通过执行以下操作来指定所需的元素:
new ByChained(By.id("details"),By.id("firstName"));
发生的情况是,它找到第一个元素,然后在dom层次结构中的该元素下搜索列表中下一个选择器。基本上,此By只是一种不再需要执行以下操作的好方法:
details = driver.findElement(By.id("details")); input = details.findElement(By.id("firstName"));