Selenium WebDriver (JAVA) - беглое ожидание не работает HALP - PullRequest
0 голосов
/ 06 февраля 2019

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

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

Для этого у вас есть каждые 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 Ответ

0 голосов
/ 07 февраля 2019

Ваш 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;
...