visibilityOfElementLocated与visibilityOf

时间:2017-02-04 09:04:25

标签: java selenium selenium-webdriver webdriver

当我尝试在代码下面运行时,visibilityOfElementLocated完全正常,webdriver会在给定时间内等待元素。

dr.get("http://www.seleniumframework.com/Practiceform/");
WebDriverWait wait=new WebDriverWait(dr,30);
WebElement we = wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Element5")));

但是如果我使用visibilityOf的方式相同,它会给我

  

NoSuchElementException异常

WebElement we = wait.until(ExpectedConditions.visibilityOf(dr.findElement(By.linkText("Element3"))));

你能解释一下为什么我会得到这个例外吗?

2 个答案:

答案 0 :(得分:8)

  

但是如果我使用“visibilityOf”的方式相同,它会给我NoSuchElementException

实际上,您通过以下代码 Exception 获得dr.findElement(By.linkText("Element3")),在您提供的代码中,此行将首先执行,如果元素将被查找,则{{3 } callable将执行。

仅供参考,ExpectedConditions.visibilityOf()会抛出异常或返回WebDriver.findElement()

WebElementvisibilityOfElementLocated : -

  • visibilityOf用于检查元素是否存在于页面的DOM上且可见。表示它使用By对象而不是具有可调用函数的WebElement对象来查找该元素,然后检查该元素是否可见。

  • visibilityOfElementLocated用于检查已知在页面的DOM 上存在的元素是否可见。表示您已经找到该元素,只检查该可见性。

答案 1 :(得分:7)

根据this

  

visibilityOf :不会检查元素状态,因为错误会解释它。

     

visibilityOfElementLocated :检查元素是存在还是可见。要检查可见性,请确保元素的高度和宽度大于0。