Как бы вы использовали события с Selenium 2

#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;
    }