visibilityOfElementLocated与visibilityOf

J_C*_*der 2 java selenium webdriver selenium-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")));
Run Code Online (Sandbox Code Playgroud)

但如果我使用同样的方式visibilityOf,它给了我

NoSuchElementException异常

WebElement we = wait.until(ExpectedConditions.visibilityOf(dr.findElement(By.linkText("Element3"))));
Run Code Online (Sandbox Code Playgroud)

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

Sau*_*aur 10

但同样的方式,如果我使用"visibilityOf",它给我NoSuchElementException

实际上,你正在Exception通过这行代码dr.findElement(By.linkText("Element3")),在你提供的代码中,这行将首先执行,如果元素将被找到,那么ExpectedConditions.visibilityOf()将执行callable.

仅供参考,WebDriver.findElement()要么抛出异常,要么返回WebElement.

visibilityOfElementLocatedVs visibilityOf: -

  • visibilityOfElementLocated用于检查元素是否存在于页面的DOM 上并且可见.意味着它使用Byobject而不是WebElement具有可调用函数的对象来首先找到该元素,然后检查该元素是否可见.

  • visibilityOf用于检查已知存在于页面DOM上的元素是否可见.意味着您已经找到该元素,只检查该可见性.

  • 这个答案帮了大忙。谢谢。 (2认同)

小智 7

根据这个:

visibilityOf:不检查存在的的元素作为错误解释它.

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