Selenium WebDriver (JAVA) - беглое ожидание не работает HALP

После некоторого времени поиска проблемы у меня не было никакого решения. И вот я здесь.

Некоторые предыстории, я пытаюсь автоматизировать регистрацию, подтверждение и присоединиться к "Живому классу" для определенной платформы.

Для этого каждые 10 минут у вас есть 5-минутное окно, в котором вы можете зарегистрироваться, затем подтвердить, затем подождать X раз, затем присоединиться к живому классу.

Но это только для первой части, где я хочу зарегистрироваться. Вот что я сделал, используя свободное ожидание:

public void joinPrivateClass() {

    System.out.println("Starting join private class");

             Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(Duration.ofSeconds(480))
            .pollingEvery(Duration.ofSeconds(5))
            .ignoring(NoSuchElementException.class);


    WebElement signUp = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            WebElement signUpButton = driver.findElement(By.xpath("//*[@id=\"live-class-322102\"]/div[1]/div/div/button"));

            if(signUpButton.isDisplayed()){
                System.out.println("button is displayed");
            }   else {
                System.out.println("button is not displayed yet");
            }
            return signUpButton;
        }
    }); signUp.click();


}

Моя проблема заключается в том, что после загрузки страницы, пока пользователь fluentwait "работает", я ожидал, что "Кнопка не будет отображаться" каждые 5 секунд, пока она не будет нажата, а затем нажата. но пока кнопка отображается или нет, я не получаю ни сообщения, ни "Кнопка не отображается", ни "Кнопка отображается", поэтому я предполагаю, что что-то не работает в "wait.until"

Некоторые вещи, чтобы упомянуть, я не программист, так что извините, если я сделал что-то не так,

Также в моей IDE (intelliJ) он помечает меня как "драйвер" этой части кода

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)

У "пурпурного" и этого "водителя":

public WebElement apply(WebDriver driver)

в сером, если это имеет какое-либо отношение к! спасибо за вашу драгоценную помощь

1 ответ

Ваш wait построен с ignoring(NoSuchElementException.class), Так что пока кнопка не существует, ваш wait.until(...) будет просто молча продолжать терпеть неудачу в findElement(...) линия - она ​​никогда не дойдет до println(...),

Удалить ignoring(...) от вашего ожидания и изменить wait.until(...) тело к чему-то вроде:

WebElement signUpButton;
try {
    signUpButton = driver.findElement(By.xpath("//*[@id=\"live-class-322102\"]/div[1]/div/div/button"));
    System.out.println("button is displayed");
} catch(NoSuchElementException ignored) {
    System.out.println("button is not displayed yet");
}
return signUpButton;
Другие вопросы по тегам