Как заставить селен ждать ответа ajax? - PullRequest
57 голосов
/ 14 мая 2010

Как я могу заставить селен ждать что-то вроде виджета календаря для загрузки? Прямо сейчас я просто делаю Thread.sleep(2500) после экспорта тестового примера в программу junit.

Ответы [ 13 ]

1 голос
/ 17 июня 2013

У меня была похожая ситуация, я хотел дождаться ajax-запросов, чтобы панель загрузки исчезла, я проверил html до и после запросов, обнаружил, что есть div для панели загрузки ajax, dix отображается во время запроса ajax и скрывается после завершения запроса. Я создал функцию ожидания отображения панели, а затем ожидания ее скрытия

</p>

<code>public void WaitForModalPanel()
{
    string element_xpath = ".//*[@id='ajaxLoadingModalPanelContainer'  and not(contains(@style,'display: none'))]";
    WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 2, 0));
    wait.Until(ExpectedConditions.ElementIsVisible(By.XPath(element_xpath)));
    element_xpath = ".//*[@id='ajaxLoadingModalPanelContainer' and contains(@style,'DISPLAY: none')]";
    wait.Until(ExpectedConditions.ElementExists(By.XPath(element_xpath)));
}
</code>

Проверьте это для более подробной информации

0 голосов
/ 12 июля 2016

Если ожидаемый элемент управления является веб-элементом «Ajax», следующий код будет ожидать его или любого другого веб-элемента Ajax, чтобы завершить загрузку или выполнить все, что ему нужно, чтобы вы могли более безопасно продолжить с вашими шагами.

    public static void waitForAjaxToFinish() {

    WebDriverWait wait = new WebDriverWait(driver, 10);

    wait.until(new ExpectedCondition<Boolean>() { 
        public Boolean apply(WebDriver wdriver) { 
            return ((JavascriptExecutor) driver).executeScript(
                    "return jQuery.active == 0").equals(true);
        }
    }); 

}
0 голосов
/ 18 апреля 2012

Для тех, кто использует простые лица, просто сделайте:

selenium.waitForCondition("selenium.browserbot.getCurrentWindow().$.active==0", defaultWaitingPeriod);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...