是@FindBy(id ='blabla')与// * [@@ id ='blabla]

问题描述 投票:1回答:2

我决定试一试Katalon,并得到了这个问题,因为Katalon Studio在用户选择“按属性'id'定位”时显示//*[@id='blabla']将用于定位元素。但对我而言,它看起来像xPath的变体。所以我想知道,当在JAVA中-Selenium时,我写@findBy (id='blabla')-硒将其转换为//*[@id = 'blabla']

找不到答案

Google,论坛,katalon文档

UPDATE:我想知道这两种方法是否完全相同。 1.查找元素会花费相同的时间吗? 2.两种方法都将从DOM的顶部开始寻找元素吗?

selenium xpath katalon-studio
2个回答
3
投票

从功能上讲,它们都做同样的事情:

  • @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。遍历代码,您将发现它。


1
投票

等效。 (但它可能取决于特定的硒绑定)

如果要查看Selenium Java库的By类,您可以看到如下代码:

public List<WebElement> findElements(SearchContext context) {
    return context instanceof FindsById ? ((FindsById)context).findElementsById(this.id) : ((FindsByXPath)context).findElementsByXPath(".//*[@id = '" + this.id + "']");
}

单个元素查找仅重用集合的查找。

© www.soinside.com 2019 - 2024. All rights reserved.