WebDriver
Selenium 2.0a2 以降では、要素が表示されているかどうかを確認できません。
WebDriver.findElement
を返しますがWebElement
、残念ながらメソッドはありませんisVisible
。を使用するWebElement.clear
かWebElement.click
、両方をスローすることでこれを回避できますElementNotVisibleException
が、これは非常に汚いと感じます。
より良いアイデアはありますか?
私は質問に答えるのが少し遅れていますが:
を使用WebElement.isDisplayed()
して、要素が表示されているかどうかを確認できるようになりました。
注:
要素が非表示になる理由は多数あります。Selenium はそれらのほとんどをカバーしようとしますが、期待どおりに機能しないエッジ ケースがあります。
たとえば、要素にまたはがある場合isDisplayed()
は返されますが、少なくとも私のテストでは、CSS の配置のために要素が別の要素で覆われているかどうかを確実に検出することはできません。false
display: none
opacity: 0
element instanceof RenderedWebElement
動作するはずです。
私は次の2つの提案された方法を持っています:
isDisplayed()
以下のように使用できます。
driver.findElement(By.id("idOfElement")).isDisplayed();
以下に示すようにメソッドを定義して呼び出すことができます。
public boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
}
catch (org.openqa.selenium.NoSuchElementException e) {
return false;
}
}
これで、以下のようにアサーションを実行して、要素が存在するかどうかを確認できます。
assertTrue(isElementPresent(By.id("idOfElement")));
C# を使用している場合は、driver.Displayed になります。私自身のプロジェクトの例を次に示します。
if (!driver.FindElement(By.Name("newtagfield")).Displayed) //if the tag options is not displayed
driver.FindElement(By.Id("expand-folder-tags")).Click(); //make sure the folder and tags options are visible
Driver.FindElement
は HTML ソースのみをチェックするため、要素が表示されているかどうかを確認することが重要です。ただし、ポップアップ コードはページの html にあり、表示されない可能性があります。したがって、Driver.FindElement
関数は偽陽性を返します (そして、テストは失敗します)
ele が表示されていることを確認します。
public static boolean isElementVisible(final By by)
throws InterruptedException {
boolean value = false;
if (driver.findElements(by).size() > 0) {
value = true;
}
return value;
}
これを試して
public boolean isPrebuiltTestButtonVisible() {
try {
if (preBuiltTestButton.isEnabled()) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}