Abh*_*kar 12 selenium webdriver selenium-webdriver
我对ByChained类的文档提到的内容非常困惑.它说:
用于使用一系列其他查找来定位文档中的元素的机制.此类将查找按顺序匹配每个定位符的所有DOM元素,例如driver.findElements(new ByChained(by1,by2))将查找与by2匹配的所有元素,并显示在与by1匹配的元素下.
code.google.com 上的selenium 也存在一个问题,为ByChained类引发,有人评论说它用于使用多个定位器查找元素/元素.
我不明白.为什么by1和by2是两个不同元素的定位器?当我最初遇到这个课程时,我觉得通过使用不同的定位器来帮助定位元素.因此,如果一个定位器不起作用,则下一个定位器将起作用.但是当我几乎使用这个类时,它表现得非常奇怪并且一直抛出NoSuchElementException.
例如,如果我的html是:
<html>
<body>
<div id="details">
<input id="firstName" class="personName" type="text"/>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想通过在ByChained中使用两个定位器来找到输入字段:
1.使用By.id("firstName")
2. usingBy.className("personName")
所以我的代码变成:
By myBy = new ByChained(By.id("firstName"),By.className("personName"));
driver.findElement(myBy);
Run Code Online (Sandbox Code Playgroud)
执行时,我得到了NoSuchElementException.我期待如果我的第一个By不起作用,那么它将在系列中找到具有下一个By的元素.
有人可以解释这个类如何使用一个例子,在哪些情况下可以使用它?
Pau*_*ris 19
这个类的功能是允许你使用dom中的heirarchy来定位元素.
让我们说因为某些原因你有以下html:
<html>
<body>
<div id="details">
<input id="firstName" class="personName" type="text"/>
</div>
<input id="firstName" class="personName" type="text"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
并且你想获得div之间的元素而不是它自己的元素.您可以使用ByChained by通过执行以下操作来指定您想要该元素:
new ByChained(By.id("details"),By.id("firstName"));
Run Code Online (Sandbox Code Playgroud)
会发生的是,它找到第一个元素,然后在dom层次结构中搜索下一个列表中的选择器.基本上这个By只是一个很好的清洁方式,不再需要执行以下操作:
details = driver.findElement(By.id("details"));
input = details.findElement(By.id("firstName"));
Run Code Online (Sandbox Code Playgroud)
您的请求将通过可以调用的ByAny内容来满足,该内容将返回与任何传递的By参数匹配的元素.没有这样的AFAIK级.
但是,ByChained工作方式不同.它找到第一个参数匹配的元素,然后使用第二个参数等搜索它们的后代.所以,如果你有这样的HTMl:
<html>
<body>
<div id="details">
<input id="firstName" class="personName" type="text"/>
</div>
<div id="notDetails">
<input id="secondName" class="personName" type="text"/>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
并且你想找到下面的class=personName元素id=details,你可以使用CSS选择器,XPath表达式,或者
new ByChained(By.id("details"), By.className("personName"))
Run Code Online (Sandbox Code Playgroud)
请注意,还有一个ByAll类可以搜索与By传递的所有参数匹配的元素.
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |