当我尝试在代码下面运行时,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"))));
你能解释一下为什么我会得到这个例外吗?
答案 0 :(得分:8)
但是如果我使用“visibilityOf”的方式相同,它会给我NoSuchElementException
实际上,您通过以下代码 Exception
获得dr.findElement(By.linkText("Element3"))
,在您提供的代码中,此行将首先执行,如果元素将被查找,则{{3 } callable将执行。
仅供参考,ExpectedConditions.visibilityOf()
会抛出异常或返回WebDriver.findElement()
。
WebElement
对visibilityOfElementLocated
: -
visibilityOf
用于检查元素是否存在于页面的DOM上且可见。表示它使用By
对象而不是具有可调用函数的WebElement
对象来查找该元素,然后检查该元素是否可见。
visibilityOfElementLocated
用于检查已知在页面的DOM 上存在的元素是否可见。表示您已经找到该元素,只检查该可见性。
答案 1 :(得分:7)
根据this:
visibilityOf :不会检查元素的状态,因为错误会解释它。
visibilityOfElementLocated :检查元素是存在还是可见。要检查可见性,请确保元素的高度和宽度大于0。