无法将elementIsNotVisible与selenium webdriver for javascript一起使用
我无法通过使用Selenium JavaScript Webdriver的无法将elementIsNotVisible与selenium webdriver for javascript一起使用,javascript,selenium,selenium-webdriver,webdriver,promise,Javascript,Selenium,Selenium Webdriver,Webdriver,Promise,我无法通过使用Selenium JavaScript Webdriver的elementIsNotVisible条件来确定元素是否不存在。该条件需要webdriver.WebElement对象,但这是不可能的,因为该元素可能已从页面中消失,从而导致出现NoTouchElementException。使用driver.findElement()将不起作用,因为它返回WebElementPromise对象 driver.wait(until.elementIsNotVisible(driver.fi
elementIsNotVisible
条件来确定元素是否不存在。该条件需要webdriver.WebElement对象,但这是不可能的,因为该元素可能已从页面中消失,从而导致出现NoTouchElementException
。使用driver.findElement()
将不起作用,因为它返回WebElementPromise
对象
driver.wait(until.elementIsNotVisible(driver.findElement(By.css('div.bg-danger > div'))));
var element = driver.findElement(By.css('div.bg-danger > div')); // WebElement
driver.wait(until.elementIsNotVisible(element)); // not a WebElementPromise
如何解决我的头发撕裂问题?
elementIsNotVisible
创建一个条件,当您要验证元素是否存在于DOM
中时,该条件将等待给定元素位于DOM
中,但用户不可见
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div.bg-danger > div")));
因此,您无法确定元素是否存在于DOM
中,或者是否未使用elementIsNotVisible
,因为它假定元素位于DOM
中,而现在它不可见
driver.findElement()
返回元素或NoSuchElementException
,因此可以通过处理异常来确定元素是否存在
确定元素存在的最佳方法是使用driver.findElements()
,它返回元素列表或空列表。因此,您只需检查其长度,如下所示:-
var elements = driver.findElements(By.css('div.bg-danger > div'));
if(elements.length == 0) {
console.log("element not visible");
}
这确实是Java中的解决方案,但不幸的是,[JavaScript API]()中没有invisibilityOfElementLocated。elementIsNotVisible是我所知道的最接近的等价物。这在很大程度上解决了我的问题。我将通过投票的承诺来找出如何做到这一点。谢谢