Подтвердить что ты не робот

Лучший способ проверить, что элемент отсутствует с помощью Selenium WebDriver с java

Я пытаюсь использовать код ниже, но кажется, что он не работает... Может ли кто-нибудь показать мне лучший способ сделать это?

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

Ответ 1

i обычно пара методов (в паре) для проверки наличия или отсутствия элемента:

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

Надеюсь, что это поможет)

Ответ 2

Вместо того, чтобы делать findElement, findElements и проверять длину возвращаемых элементов равно 0. Вот как я работаю с использованием WebdriverJS, и я ожидаю, что то же самое будет работать в Java

Ответ 3

Невозможно прокомментировать Руководство по испытаниям Meteor, так как у меня нет репутации, но я хотел привести пример, который заставил меня довольно долго понять:

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

Это утверждение проверяет отсутствие совпадающих элементов в DOM и возвращает значение Zero, поэтому утверждение проходит, когда элемент отсутствует. Также он потерпит неудачу, если он будет присутствовать.

Ответ 4

Используйте findElements вместо findElement.

findElements вернет пустой список, если не будут найдены совпадающие элементы вместо исключения. Кроме того, мы можем убедиться, что элемент присутствует или нет.

Ex: Элементы списка = driver.findElements(By.yourlocatorstrategy);

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

Ответ 5

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