VisibilityOfElementLocated与presenceOfElementLocated

时间:2016-06-26 13:25:44

标签: selenium

考虑一下:

val element = ...
String str = element.getAttribute("innerHTML")

因此,如果我只想获得此value,是否足以使用presenceOfElementLocated代替visibilityOfElementLocated

3 个答案:

答案 0 :(得分:13)

您可以同时使用presenceOfElementLocatedvisibilityOfElementLocated来获取value

但是从性能角度来看,我认为presenceOfElementLocated会稍快一点,因为它只是检查页面的DOM上是否存在元素。这并不一定意味着该元素是可见的。而visibilityOfElementLocated必须检查页面的DOM上是否存在元素且可见。可见性意味着不仅要显示元素,还要使其高度和宽度大于0。

因此,根据您的情况,使用presenceOfElementLocated即可。

根据您的使用案例,您可以考虑以下几点选择合适的方法。

希望它会对你有所帮助.. :)

答案 1 :(得分:1)

如果您只想获取值presenceOfElementLocated就足以提取值。

visibilityOfElementLocated用于测试目的。例如,当你以某种方式与元素进行交互时,看看元素会发生什么。

答案 2 :(得分:0)

presenceOfElementLocated()

presenceOfElementLocated() 是检查元素是否存在于页面的 DOM 上的期望值。这并不一定意味着该元素是可见的。

public static ExpectedCondition<WebElement> presenceOfElementLocated​(By locator)

Parameters:
locator - used to find the element
Returns:
the WebElement once it is located

visibilityOfElementLocated()

visibilityOfElementLocated() 是检查元素是否存在于页面的 DOM 上并且可见的期望。可见性是指元素不仅显示出来,而且高度和宽度都大于0。

public static ExpectedCondition<WebElement> visibilityOfElementLocated​(By locator)

Parameters:
locator - used to find the element
Returns:
the WebElement once it is located and visible

这个用例

要在理想情况下使用 Selenium 获得 innerHTML 的值,元素需要可见,而不仅仅是存在< /强>。所以你必须使用visibilityOfElementLocated()

基于 的有效代码块将是:

  • 使用 visibilityOfElementLocated()

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("elementCssSelector")));
    System.out.println(element.getAttribute("innerHTML"));
    
  • 在一行中:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("elementCssSelector"))).getAttribute("innerHTML"));
    

基于 的有效代码块将是:

  • 使用 visibility_of_element_located()

    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css_selector")))
    print(element.get_attribute("innerHTML"))
    
  • 在一行中:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css_selector")))).get_attribute("innerHTML"))
    

基于 的有效代码块将是:

  • 使用 ElementIsVisible()

    var element = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("ElementCssSelector")));
    Console.WriteLine(element.GetAttribute("innerHTML"));
    
  • 在一行中:

    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("ElementCssSelector"))).GetAttribute("innerHTML"));