После просмотра документации по селену мне интересно, пытаюсь ли я реализовать явное ожидание некорректно.
В документах всегда отображается идентификация нового элемента, а затем назначение определенного ожидания указанному элементу
WebDriver driver = new ChromeDriver();
driver.get("https://google.com/ncr");
driver.findElement(By.name("q")).sendKeys("cheese" + Keys.ENTER);
// Initialize and wait till element(link) became clickable - timeout in 10 seconds
WebElement firstResult = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
// Print the first result
System.out.println(firstResult.getText());
В этом примере сначала создается новый элемент firstResult, затем ему назначается определенное ожидание.
Требуется ли это? Всегда следует делать таким образом?
Вот почему я спрашиваю.
Я использую модель PageFactory, и мои элементы определены с помощью аннотации FindBy, как показано здесь.
// Input field for slice ID
@FindBy(how = How.XPATH, using = "//input[@name='id']")
private WebElement inputSliceId;
Затем в том же классе я определил несколько удобных методов для их использования.
Так что теперь, в моих удобных методах, я должен делать такие вещи?
inputSliceId = new WebDriverWait(driver, Duration.ofSeconds(10))...
inputSliceId.sendKeys(...
То, что я делал, и сейчас я спрашиваю, это помещает операторы ожидания, которые не присваиваются непосредственно рассматриваемому элементу.
Например, я делал что-то вот так.
buttonSubmit.click();
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@role='alertdialog']")));
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@role='alertdialog']")));
Почему? (может быть совершенно не прав)
После нажатия кнопки мне нужно дождаться появления всплывающего окна. Как только это произойдет, я жду, пока оно исчезнет, прежде чем продолжить
Вот главный вопрос Эти две строки ожидания ничего не делают, потому что я не назначаю их элементу? Или они все еще заставляют веб-драйвер удерживаться до тех пор, пока не возникнут условия, определенные ожиданием?