web-dev-qa-db-ja.com

javaでSelenium WebDriverを使用して要素が存在しないことを確認する最良の方法

以下のコードを試していますが、うまくいかないようです...誰かがこれを行う最良の方法を教えてもらえますか?

public void verifyThatCommentDeleted(final String text) throws Exception {
    new WebDriverWait(driver, 5).until(new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver input) {
                try {
                    input.findElement(By.xpath(String.format(
                            Locators.CHECK_TEXT_IN_FIRST_STATUS_BOX, text)));
                    return false;
                } catch (NoSuchElementException e) {
                    return true;
                }
            }
        });
    }
20
Roman Iuvshin

私は通常、要素が存在するかどうかを確認するための2つの方法(ペアで):

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

public boolean isElementVisible(String cssLocator){
    return driver.findElement(By.cssSelector(cssLocator)).isDisplayed();
}

SeleniumはDOMで要素を見つけることができる場合がありますが、それらは非表示になることがあるため、Seleniumは要素とやり取りできないことに注意してください。したがって、この場合、可視性をチェックするメソッドが役立ちます。

私が見つけた最良の解決策が表示されるまで要素を待ちたい場合は、流waitな待機を使用することです:

public WebElement fluentWait(final By locator){
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);

    WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return driver.findElement(locator);
        }
    });

    return foo;
};

お役に立てれば)

26

FindElementを実行する代わりに、findElementsを実行し、返された要素の長さが0であることを確認します。これは、WebdriverJSを使用して行う方法で、Javaでも同じことが機能することを期待しています

37
Xolv.io

findElementの代わりにfindElementsを使用します。

findElementsは、例外の代わりに一致する要素が見つからない場合、空のリストを返します。また、要素が存在するかどうかを確認できます。

例:要素のリスト= driver.findElements(By.yourlocatorstrategy);

if(elements.size()>0){
    do this..
 } else {
    do that..
 }
3

私には担当者がいないので、The Meteor Test Manualにコメントできませんが、把握するのにかなり時間がかかった例を提供したかったのです。

Assert.assertEquals(0, wd.findElements(By.locator("locator")).size());

このアサーションは、DOMに一致する要素がないことを確認し、ゼロの値を返すため、要素が存在しない場合にアサーションはパスします。また、存在する場合は失敗します。

2
Matthew Hodgson
    WebElement element = driver.findElement(locator);

    Assert.assertFalse(element.isDisplayed());

アサーションは、要素が存在しない場合に合格し、そうでない場合は失敗します。

0
Shaurya Nigam
WebElement element = driver.findElement(locator);
Assert.assertNull(element);

上記のアサーションは、要素が存在しない場合に合格します。

0
skumar
int i=1;

while (true) {
  WebElementdisplay=driver.findElement(By.id("__bar"+i+"-btnGo"));
  System.out.println(display);

  if (display.isDisplayed()==true)
  { 
    System.out.println("inside if statement"+i);
    driver.findElement(By.id("__bar"+i+"-btnGo")).click();
    break;
  }
  else
  {
    System.out.println("inside else statement"+ i);
    i=i+1;
  }
}
0
Avijit Samal