Утверждают, что WebElement отсутствует при использовании Selenium WebDriver с Java - PullRequest
39 голосов
/ 19 июля 2010

В тестах, которые я пишу, если я хочу утверждать, что WebElement присутствует на странице, я могу сделать следующее:

driver.findElement(By.linkText("Test Search"));

Это пройдет, если оно существует, и будет разорвано, если его не существует. Но теперь я хочу утверждать, что ссылка не существует. Мне неясно, как это сделать, поскольку приведенный выше код не возвращает логическое значение.

РЕДАКТИРОВАТЬ Вот как я придумал собственное исправление, мне интересно, есть ли еще лучший выход.

public static void assertLinkNotPresent (WebDriver driver, String text) throws Exception {
List<WebElement> bob = driver.findElements(By.linkText(text));
  if (bob.isEmpty() == false) {
    throw new Exception (text + " (Link is present)");
  }
}

Ответы [ 14 ]

0 голосов
/ 29 ноября 2016

Для Appium 1.6.0 и выше

    WebElement button = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//XCUIElementTypeButton[@name='your button']"))));
    button.click();

    Assert.assertTrue(!button.isDisplayed());
0 голосов
/ 25 мая 2016

Для node.js я нашел следующий эффективный способ ожидания отсутствия элемента:

// variable to hold loop limit
    var limit = 5;
// variable to hold the loop count
    var tries = 0;
        var retry = driver.findElements(By.xpath(selector));
            while(retry.size > 0 && tries < limit){
                driver.sleep(timeout / 10)
                tries++;
                retry = driver.findElements(By.xpath(selector))
            }
0 голосов
/ 28 июня 2013

Вы можете использовать Arquillian Graphene framework для этого. Так что примером для вашего случая может быть

Graphene.element(By.linkText(text)).isPresent().apply(driver));

Также предоставляет вам множество хороших API для работы с Ajax, быстрое ожидание, объекты страниц, фрагменты и так далее. Это определенно облегчает разработку тестов на основе Selenium.

0 голосов
/ 01 октября 2012

findElement проверит источник html и вернет true, даже если элемент не отображается. Чтобы проверить, отображается элемент или нет, используйте -

private boolean verifyElementAbsent(String locator) throws Exception {

        boolean visible = driver.findElement(By.xpath(locator)).isDisplayed();
        boolean result = !visible;
        System.out.println(result);
        return result;
}
...