#events #webdriver #selenium-webdriver
#Мероприятия #webdriver #selenium-webdriver
Вопрос:
Как можно нажать на кнопку, дождаться события, подобного blur, а затем получить pagesource сайта?
Я знаю, что могу использовать метод getPagesource (), но я хочу сделать это только после того, как будет показано изображение загрузки jquery.
Ответ №1:
Если событие размытия приводит к появлению видимого эффекта, вы могли бы дождаться этого эффекта, например, ожидания отображения изображения.
В противном случае, если от этого события нет видимого эффекта, вам понадобится «testing hook», чтобы сообщить вашему тесту, что функция, связанная с этим событием, уже запущена, например, переменной javascript присваивается известное значение, которое вы могли бы запросить в тесте.
В обоих случаях вы могли бы использовать явное ожидание условия, подобное тому, что показано в документации:
http://seleniumhq.org/docs/04_webdriver_advanced.html#explicit-and-implicit-waits
Редактировать:
Что касается вашего комментария, Найгаард, вы могли бы использовать явное ожидание, подобное этому:
WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
Boolean expectedTextAppeared =
(new WebDriverWait(driver, 10))
.until(ExpectedConditions.textToBePresentInElement(
By.id("ctl00_content_createnewschema_modalAlert_alertMessage"), "textYoureExpecting"));
Этот код будет ожидать появления «textYoureExpecting» в промежутке с таймаутом в 10 секунд. Если для его отображения требуется больше времени, вам просто нужно отрегулировать время ожидания.
Комментарии:
1. Ну, я получил <span id=»ctl00_content_createnewschema_modalAlert_alertMessage»>, который получит значение после всплывающего окна javascript, и он получит его после выхода. Но я не вижу, как я могу искать значение, когда оно добавляется AJAX
Ответ №2:
Для всех AJAX-запросов на веб-странице я использую jQuery.Активный флаг, чтобы определить, загружена страница или нет. Если jQuery.Значение Active не равно нулю, это означает, что это количество активных запросов, с которыми имеет дело браузер. Когда оно сводится к нулю, это означает, что количество активных запросов равно нулю. Я не использовал этот флаг для событий размытия, но вы могли бы также попробовать. Вам определенно следует использовать неявное и явное ожидание, предложенное Луисом. Вот функция, которая ожидает завершения активных запросов в течение 5 минут. Возможно, вы могли бы параметризовать это, добавить try, catch и т.д.
public int waitforAJAXRequestsToComplete(){
long start = System.currentTimeMillis();
long duration;
boolean ajaxNotReady = true;
while(ajaxNotReady){
if(((JavascriptExecutor)driver).executeScript("return jQuery.active").toString().equals("0"))
return 0;
duration = System.currentTimeMillis() - start;
duration = (long) (duration/(60*1000F));
if(duration>5.0)
return 1;
}
return 1;
}