selenium .get Element By() 索引 0 与单个 .getElementByid()
selenium .getElementsBy() index 0 vs single .getElementBy()
我正在学习 Selenium 并且有一个问题我找不到答案。
除了“By”定位符之外,两者之间的规格是否有任何真正的区别?
WebDriver.getElementsBy().get(0)
与单身
WebDriver.getElementBy()
它们来自同一来源吗?他们内部有相同的方法吗?如果我总是开始使用 getElementsBy().get(0)
而不是单一的,它会影响我的测试用例吗?'
谢谢。
实际上 getElementBy()
内部使用 getElementsBy().get(0)
所以它们在功能上几乎相同。
参见source code:
/**
* 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()
的查找失败,您将得到异常,而后一种情况则不会。
- findElement() 用于通过提供的定位器机制(如 id、xpath、css 等)查找当前页面上的第一个 Web 元素,而 findElements() 用于通过提供的定位器机制查找当前页面上的所有 Web 元素id、xpath、css等定位器机制
- findElement() 将 return 只有第一个网络元素,即使定位器定位了多个网络元素。 findElements() returns 所有匹配的网络元素。 findElement() 方法在内部调用 findElements() 方法本身和 return 第一个索引的 Web 元素。
- Return 类型的 findElement() 方法是 WebElement 而 return 类型的 findElements() 方法是列表。
- 如果找不到匹配的元素,findElement() 将抛出 NoSuchElementException。如果找不到匹配的元素,findElements() 将 return 一个空列表。这就是 findElements() 是检查不存在 Web 元素的更好方法的原因。请更多地关注这一点。 NoSuchElementException 由 findElement() 而不是 findElements() 抛出。
结论: 尽可能使用 findelements,因为您将避免 NoSuchElementException ,而且它应该更快,因为 findelement 正在调用 findelements 并且 return 只有找到第一个元素。
我正在学习 Selenium 并且有一个问题我找不到答案。
除了“By”定位符之外,两者之间的规格是否有任何真正的区别?
WebDriver.getElementsBy().get(0)
与单身
WebDriver.getElementBy()
它们来自同一来源吗?他们内部有相同的方法吗?如果我总是开始使用 getElementsBy().get(0)
而不是单一的,它会影响我的测试用例吗?'
谢谢。
实际上 getElementBy()
内部使用 getElementsBy().get(0)
所以它们在功能上几乎相同。
参见source code:
/**
* 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()
的查找失败,您将得到异常,而后一种情况则不会。
- findElement() 用于通过提供的定位器机制(如 id、xpath、css 等)查找当前页面上的第一个 Web 元素,而 findElements() 用于通过提供的定位器机制查找当前页面上的所有 Web 元素id、xpath、css等定位器机制
- findElement() 将 return 只有第一个网络元素,即使定位器定位了多个网络元素。 findElements() returns 所有匹配的网络元素。 findElement() 方法在内部调用 findElements() 方法本身和 return 第一个索引的 Web 元素。
- Return 类型的 findElement() 方法是 WebElement 而 return 类型的 findElements() 方法是列表。
- 如果找不到匹配的元素,findElement() 将抛出 NoSuchElementException。如果找不到匹配的元素,findElements() 将 return 一个空列表。这就是 findElements() 是检查不存在 Web 元素的更好方法的原因。请更多地关注这一点。 NoSuchElementException 由 findElement() 而不是 findElements() 抛出。
结论: 尽可能使用 findelements,因为您将避免 NoSuchElementException ,而且它应该更快,因为 findelement 正在调用 findelements 并且 return 只有找到第一个元素。