selenium .getElementsBy() index 0 vs single .getElementBy()



我正在学习硒,有一个问题我找不到答案。

除了"By"定位器,在规格上有什么真正的区别吗WebDriver.getElementsBy().get(0)对单WebDriver.getElementBy()

它们来自同一来源吗?他们内部有相同的方法吗?它会影响我的测试用例,如果我开始使用getElementsBy().get(0)总是而不是单一的?'

谢谢。

实际上getElementBy()内部使用getElementsBy().get(0),因此它们在功能上几乎相同。

查看源代码:

/**
* Find a single element. Override this method if necessary.
*
* @param context A context to use to find the element.
* @return The WebElement that matches the selector.
*/
public WebElement findElement(SearchContext context) {
List<WebElement> allElements = findElements(context);
if (allElements == null || allElements.isEmpty()) {
throw new NoSuchElementException("Cannot locate an element using " + toString());
}
return allElements.get(0);
}

如果查找getElementBy()失败,您将获得Exception,而不像后一种情况,您不会。

  1. findElement()用于通过提供的定位器机制(如id, xpath, css等)查找当前页面上的第一个web元素,而findelelements()用于通过提供的定位器机制(如id, xpath, css等)查找当前页面上的所有web元素。
  2. findElement()将只返回第一个web元素,即使定位器定位到多个web元素。findElements()返回所有匹配的web元素。findElement()方法内部调用findElements()方法本身并返回第一个索引的web元素。
  3. findElement()方法的返回类型是WebElement,而findElements()方法的返回类型是List。
  4. 如果没有找到匹配的元素,findElement()将抛出NoSuchElementException。如果没有找到匹配的元素,findElements()将返回一个空列表。这就是为什么findElements()是检查是否存在web元素的更好方法。请多注意这一点。NoSuchElementException是由findElement()而不是findElements()抛出的。

结论:在可能的情况下使用findelelements,因为您将避免NoSuchElementException,而且它应该更快,因为findelelement调用findelelements并且如果找到只返回第一个元素。

相关内容

最新更新