2016-08-31 9 views
1

elementIsNotVisibleの条件をSelenium JavaScript Webdriverで使用して要素が存在しないと判断できません。条件はwebdriver.WebElementオブジェクトを期待していますが、その要素が既にページから消えてしまう可能性があり、結果としてNoSuchElementExceptionとなります。 driver.findElement()を使用すると、WebElementPromiseオブジェクトが返されるため、機能しません。javascriptのelementIsNotVisible with Selenium webdriver

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 

髪の引き裂きの問題を解決するにはどうすればよいですか?

答えて

1

elementIsNotVisibleあなたは要素が与えられたロケータによってDOMかに存在して検証する一方でユーザーに表示DOMにあるように指定された要素を待ち、まだありません条件を作成します。

DOMにその要素が存在するかどうかを判断することはできません。DOMにある要素を想定しているため、表示されないため、elementIsNotVisibleを使用することはできません。

driver.findElement()は要素またはNoSuchElementExceptionのいずれかを返します。これを使用すると、例外を処理して要素の存在を判断できます。

要素の存在を判断する最善の方法は、要素リストまたは空のリストのいずれかを返すdriver.findElements()を使用してください。だから、あなたはちょうどそれが以下のように長さだチェックする必要があります: - (実際にJavaで解決策になる

var elements = driver.findElements(By.css('div.bg-danger > div')); 
if(elements.length == 0) { 
    console.log("element not visible"); 
} 
+1

これは私の問題を大部分解決しました。私はポーリングのためにプロミスでこれを行う方法を理解するつもりです。ありがとう! – Zwerver

0
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div.bg-danger > div"))); 
+0

が、残念ながらinvisibilityOfElementLocatedは、[JavaScriptのAPI]ではありませんhttp://seleniumhq.github.io/ selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html)。 elementIsNotVisibleは私が知る最も近い同等物です。 – Zwerver