31

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

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;
                }
            }
        });
    }
4

10 に答える 10

48

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

于 2013-07-15T01:23:04.187 に答える
37

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

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();
}

セレンはDOM内の要素を見つけることができますが、それらは見えない可能性があるため、セレンはそれらと相互作用できないことに注意してください。したがって、この場合、可視性をチェックするメソッドが役立ちます。

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

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;
};

お役に立てれば)

于 2012-09-06T15:01:55.603 に答える
6

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

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

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

if(elements.size()>0){
    do this..
 } else {
    do that..
 }
于 2017-07-06T20:00:42.303 に答える
4

担当者がいないため、Meteor Test Manualにコメントすることはできませんが、理解するのにかなりの時間がかかった例を提供したいと思いました。

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

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

于 2015-10-13T17:55:06.983 に答える
0
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;
  }
}
于 2016-07-19T12:39:04.453 に答える
0
WebElement element = driver.findElement(locator);
Assert.assertNull(element);

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

于 2018-08-22T12:55:19.317 に答える
0
public boolean isDisplayed(WebElement element) {
        try {
            return element.isDisplayed();
        } catch (NoSuchElementException e) {
            return false;
        }
    }

要素がページに表示されていることを確認したい場合は、次のようにする必要があります。

if(isDisplayed(yourElement){
...
}
else{
...
}
于 2020-07-04T05:47:11.907 に答える
0

Pythonでは、アサーションに次のものを使用します。

assert len(driver.find_elements_by_css_selector("your_css_selector")) == 0
于 2020-11-18T19:07:49.550 に答える
0

私の答えははるかに簡単で、それは私のために働きます

while(true) {
if (driver.getPageSource().contains("Enter the text of the element you wanted to check")==false) 
{//Put your code here 
    break;
}   
else if (isElementPresent(element you are trying to find)==true)
{
                //put your code here 
                break;
}

}

于 2021-06-24T11:32:48.440 に答える
-2
    WebElement element = driver.findElement(locator);

    Assert.assertFalse(element.isDisplayed());

要素が存在しない場合、アサーションは成功します。存在しない場合、アサーションは失敗します。

于 2018-11-15T12:54:33.583 に答える