Как бы вы использовали события с Selenium 2 - PullRequest
0 голосов
/ 08 ноября 2011

Как можно было бы нажать на кнопку, дождаться события, похожего на размытие, и затем получить источник страниц сайта?

Я знаю, что могу использовать метод getPagesource (), но я хочу сделать это только после того, как будет показано изображение загрузки jquery.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Если событие размытия приводит к видимому эффекту, вы можете подождать этого эффекта, например, дождаться показа изображения.

В противном случае, если нет видимого эффекта от этого события, вам понадобится «тестовый хук», чтобы сообщить вашему тесту, что функция, связанная с этим событием, уже запущена, например, для переменной javascript, установленной на известное значениечто вы могли бы запросить в тесте.

В обоих случаях вы можете использовать явное ожидание условия, как показано в документации:

http://seleniumhq.org/docs/04_webdriver_advanced.html#explicit-and-implicit-waits

РЕДАКТИРОВАТЬ:

Что касается вашего комментария, Nyegaard, вы можете использовать явное ожидание, подобное этому:

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 секунд.Если для его появления требуется больше времени, вам просто нужно настроить время ожидания.

0 голосов
/ 09 ноября 2011

Для всех запросов AJAX на веб-странице я использую флаг jQuery.Active, чтобы определить, загружена страница или нет. Если jQuery.Active не равен нулю, это означает, что это количество активных запросов, с которыми работает браузер. Когда он сводится к нулю, это означает, что количество активных запросов равно нулю. Я не использовал этот флаг для событий размытия, но вы можете попробовать. Вы должны определенно использовать неявно и явно ожидания, предложенные Луисом. Вот функция, которая ждет 5 минут для завершения активных запросов. Вы могли бы параметризировать это, добавить попробовать, поймать и т. Д.

   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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...