我决定试一试Katalon,并得到了这个问题,因为Katalon Studio在用户选择“按属性'id'定位”时显示//*[@id='blabla']
将用于定位元素。但对我而言,它看起来像xPath的变体。所以我想知道,当在JAVA中-Selenium时,我写@findBy (id='blabla')
-硒将其转换为//*[@id = 'blabla']
?
找不到答案
Google,论坛,katalon文档
UPDATE:我想知道这两种方法是否完全相同。 1.查找元素会花费相同的时间吗? 2.两种方法都将从DOM的顶部开始寻找元素吗?
从功能上讲,它们都做同样的事情:
@FindBy(id = "foo")
批注driver.findElement(By.id("foo"))
driver.findElement(By.xpath("//*[@id = 'foo']"))
driver.findElement(By.css("#foo"))
他们都通过其ID找到一个元素。
我不确定在对Selenium Server的API调用中该转换为什么,但是Selenium is open source。看看你自己。
@FindBy(...)
注释在FindBy.java中定义,该注释继承自AbstractFindByBuilder。遍历代码,您将发现它。
等效。 (但它可能取决于特定的硒绑定)
如果要查看Selenium Java库的By
类,您可以看到如下代码:
public List<WebElement> findElements(SearchContext context) {
return context instanceof FindsById ? ((FindsById)context).findElementsById(this.id) : ((FindsByXPath)context).findElementsByXPath(".//*[@id = '" + this.id + "']");
}
单个元素查找仅重用集合的查找。