нет такого элемента: невозможно найти элемент: когда я использую метод elementToBeClickable - PullRequest
0 голосов
/ 12 июня 2019

Мне нужно дождаться появления элемента, а затем щелкнуть по нему.Вот код, который я попробовал и получил NoSuchElementException.

У меня есть 300 секунд для ожидания элемента, но он пытается найти элемент: tpo.fwOptimizationTestResults() без ожидания в течение 300 секунд

WebElement fwResults = (new WebDriverWait(driver, 300))
        .until(ExpectedConditions.elementToBeClickable(tpo.fwOptimizationTestResults())); 

public WebElement fwOptimizationTestResults() {
    //return driver.findElement(By.xpath("//*[@class='table table-condensed table-bordered']"));
    return driver.findElement(By.xpath("//table[contains(@class, 'table-condensed')]"));
}

Ошибка:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//table[contains(@class, 'table-condensed')]"}
  (Session info: chrome=75.0.3770.80)

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Исключение не из elementToBeClickable, а из fwOptimizationTestResults.Вы используете driver.findElement(), который выдает исключение и оценивает до ожидаемого условия.

Существует две перегрузки, elementToBeClickable(WebElement) и elementToBeClickable(By), вам следует использовать вторую

WebElement fwResults = (new WebDriverWait(driver, 300)).until(ExpectedConditions.elementToBeClickable(By.xpath("//table[contains(@class, 'table-condensed')]")));
1 голос
/ 12 июня 2019

Вы можете изменить свой код, добавив ignoring раздел к WebDriverWait поэтому он не выйдет из строя на NPE :

WebElement fwResults = (new WebDriverWait(driver, 5))
        .ignoring(NullPointerException.class)
        .until(ExpectedConditions.elementToBeClickable(tpo.fwOptimizationTestResults()));

и, в свою очередь, поместите вашу функцию WebElement в try блок и вместо того, чтобы генерировать исключение, верните null в случае, если элемент не найден:

public WebElement fwOptimizationTestResults() {
    try {
        return driver.findElement(By.xpath("//table[contains(@class, 'table-condensed')]"));
    } catch (NoSuchElementException ex) {
        return null;
    }
}

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...