80

WebDriverSelenium 2.0a2 以降では、要素が表示されているかどうかを確認できません。

WebDriver.findElementを返しますがWebElement、残念ながらメソッドはありませんisVisible。を使用するWebElement.clearWebElement.click、両方をスローすることでこれを回避できますElementNotVisibleExceptionが、これは非常に汚いと感じます。

より良いアイデアはありますか?

4

12 に答える 12

154

私は質問に答えるのが少し遅れていますが:

を使用WebElement.isDisplayed()して、要素が表示されているかどうかを確認できるようになりました。

:

要素が非表示になる理由は多数あります。Selenium はそれらのほとんどをカバーしようとしますが、期待どおりに機能しないエッジ ケースがあります。

たとえば、要素にまたはがある場合isDisplayed() 返されますが、少なくとも私のテストでは、CSS の配置のために要素が別の要素で覆われているかどうかを確実に検出することはできません。falsedisplay: noneopacity: 0

于 2011-09-23T07:31:19.740 に答える
24

element instanceof RenderedWebElement動作するはずです。

于 2010-04-15T15:55:32.617 に答える
16

私は次の2つの提案された方法を持っています:

  1. isDisplayed()以下のように使用できます。

    driver.findElement(By.id("idOfElement")).isDisplayed();
    
  2. 以下に示すようにメソッドを定義して呼び出すことができます。

    public boolean isElementPresent(By by) {
      try {
        driver.findElement(by);
        return true;
      }
    catch (org.openqa.selenium.NoSuchElementException e) {
        return false;
      }
    }
    

これで、以下のようにアサーションを実行して、要素が存在するかどうかを確認できます。

assertTrue(isElementPresent(By.id("idOfElement")));
于 2012-10-11T04:25:48.867 に答える
9

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
于 2012-11-27T15:21:19.330 に答える
2

Driver.FindElementは HTML ソースのみをチェックするため、要素が表示されているかどうかを確認することが重要です。ただし、ポップアップ コードはページの html にあり、表示されない可能性があります。したがって、Driver.FindElement関数は偽陽性を返します (そして、テストは失敗します)

于 2011-08-18T21:36:34.493 に答える
1

ele が表示されていることを確認します。

public static boolean isElementVisible(final By by)
    throws InterruptedException {
        boolean value = false;

        if (driver.findElements(by).size() > 0) {
            value = true;
        }
        return value;
    }
于 2014-06-12T14:06:07.250 に答える
-2

これを試して

public boolean isPrebuiltTestButtonVisible() {
    try {

        if (preBuiltTestButton.isEnabled()) {

            return true;

        } else {

            return false;
        }

    } catch (Exception e) {

        e.printStackTrace();
        return false;
    }
}
于 2014-10-18T10:26:29.530 に答える