NoSuchElementException не может быть выброшено - PullRequest
0 голосов
/ 20 мая 2019

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

Я использовал NoSuchElementException для этой части моих кодов.

Вот что я пробовал раньше:

try {
    WebElement site_width_full_width = wait.until( 
            ExpectedConditions.visibilityOfElementLocated(
            By.cssSelector("label[for=site_width-full_width]")));
    site_width_full_width.click();

    Thread.sleep(1000);
    System.out.println("FullWidth Label Found!");

} catch (NoSuchElementException e) {
    System.out.println("FullWidth Label not found!");
    System.out.println(e);
}

Но когда элемент недоступен, он не может быть брошен в NoSuchElementException и все тестовые прерывания и неудачи.

Какое решение и как я могу продолжить тест, когда элемент недоступен.

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 20 мая 2019

Возможно, вы получаете исключение другого производного типа класса. Вы можете поймать его, используя родительский класс «Exception», а затем продолжить детализировать точный тип исключения.

попробуйте использовать;

try
{
            WebElement site_width_full_width = wait.until(
                    ExpectedConditions.visibilityOfElementLocated(
                    By.cssSelector("label[for=site_width-full_width]")));
            site_width_full_width.click();

            Thread.sleep(1000);
            System.out.println("FullWidth Label Found!");

        }
        catch (Exception e)
        {
            if (e instanceof NoSuchElementException)
            {
                System.out.println("FullWidth Label not found!");
                System.out.println(e);
            }
            else
            {
                System.out.println("Unexpected exception!");
                System.out.println(e);
            }
        }

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

1 голос
/ 20 мая 2019

Вы можете попробовать с его родительскими классами, такими как Throwable или Exception, в блоке catch. В моем случае я могу перебраться в блоке catch, который работает как положено

0 голосов
/ 20 мая 2019

Webdriver уже предоставляет способ решения этой проблемы гораздо более простым способом.Вы можете использовать следующий способ

 WebDriverWait wait= new WebDriverWait(driver, TimeSpan.FromSeconds(120));
    wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(ElementNotVisibleException));

 WebElement site_width_full_width = wait.until( 
            ExpectedConditions.visibilityOfElementLocated(
            By.cssSelector("label[for=site_width-full_width]")));
    site_width_full_width.click();

    Thread.sleep(1000);
    System.out.println("FullWidth Label Found!");

Примечание: Вы можете добавить все типы исключений, которые необходимо игнорировать.

0 голосов
/ 20 мая 2019

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

    try {
        WebElement site_width_full_width = wait.until(
                ExpectedConditions.visibilityOfElementLocated(
                        By.cssSelector("label[for=site_width-full_width]")
                ));
        site_width_full_width.click();
        System.out.println("FullWidth Label Found!");
    } catch (NoSuchElementException | TimeoutException e) {
        System.out.println("FullWidth Label not found!");
        System.out.println(e);
    }

Однако использование Try / Catch для потока выполнения обычно является анти-паттерном кода. Вам было бы гораздо лучше сделать что-то вроде этого:

    List<WebElement> site_width_full_width = 
            driver.findElements(By.cssSelector("label[for=site_width-full_width]"));
    if (site_width_full_width.size() > 0) {
        System.out.println("FullWidth Label Found!");
        site_width_full_width.get(0).click();
    } else {
        System.out.println("FullWidth Label not found!");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...