考虑一下:
val element = ...
String str = element.getAttribute("innerHTML")
因此,如果我只想获得此value
,是否足以使用presenceOfElementLocated
代替visibilityOfElementLocated
?
答案 0 :(得分:13)
您可以同时使用presenceOfElementLocated
或visibilityOfElementLocated
来获取value
。
但是从性能角度来看,我认为presenceOfElementLocated
会稍快一点,因为它只是检查页面的DOM上是否存在元素。这并不一定意味着该元素是可见的。而visibilityOfElementLocated
必须检查页面的DOM上是否存在元素且可见。可见性意味着不仅要显示元素,还要使其高度和宽度大于0。
因此,根据您的情况,使用presenceOfElementLocated
即可。
根据您的使用案例,您可以考虑以下几点选择合适的方法。
当您不关心元素时,请使用presenceOfElementLocated
是否可见,您只需要知道它是否在页面上。
当你需要找到哪个元素时使用visibilityOfElementLocated
也应该可见。
希望它会对你有所帮助.. :)
答案 1 :(得分:1)
如果您只想获取值presenceOfElementLocated
就足以提取值。
visibilityOfElementLocated
用于测试目的。例如,当你以某种方式与元素进行交互时,看看元素会发生什么。
答案 2 :(得分:0)
presenceOfElementLocated()
是检查元素是否存在于页面的 DOM 上的期望值。这并不一定意味着该元素是可见的。
public static ExpectedCondition<WebElement> presenceOfElementLocated(By locator)
Parameters:
locator - used to find the element
Returns:
the WebElement once it is located
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()
。
基于 java 的有效代码块将是:
使用 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"));
基于 python 的有效代码块将是:
使用 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"))
基于 c# 的有效代码块将是:
使用 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"));