VisibilityOfElementLocated 与 presenceOfElementLocated

VisibilityOfElementLocated Vs presenceOfElementLocated

考虑一下:

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

所以如果我只想得到这个 value 使用 presenceOfElementLocated() 代替 visibilityOfElementLocated() 就足够了吗?

如果只想获取值presenceOfElementLocated提取值就够了

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

您可以同时使用 presenceOfElementLocated or visibilityOfElementLocated 来获得 value

但从性能的角度来看,我猜想 presenceOfElementLocated will be slightly faster because it's just check that an element is present on the DOM of a page. This does not necessarily mean that the element is visible. while the visibilityOfElementLocated 必须检查 元素是否存在于页面的 DOM 上并且可见 .可见性是指该元素不仅被显示而且高度和宽度都大于0。

因此根据您的情况使用 presenceOfElementLocated 就足够了。

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

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

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

这个用例

要使用 获取 innerHTML 的值,理想情况下,元素需要 visible只是 在场 。所以你必须使用 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"));