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;