эквивалент selenium.wait_for_condition в привязках Python для WebDriver - PullRequest
8 голосов
/ 12 сентября 2010

Я перевожу некоторые тесты из Selenium в WebDriver.Моя проблема в том, что я не могу найти эквивалент для selenium.wait_for_condition.У привязок Python есть это в данный момент, или это все еще запланировано?

Ответы [ 3 ]

10 голосов
/ 11 ноября 2011

В настоящее время невозможно использовать wait_for_condition с WebDriver. Код селена python предоставляет класс DrivenSelenium для доступа к старым методам селена, но он не может делать wait_for_condition. В вине селена есть информация об этом .

Лучше всего использовать класс WebDriverWait. Это вспомогательный класс, который периодически выполняет функцию, ожидая, пока он вернет True. Мое общее использование

driver = webdriver.Firefox()
driver.get('http://example.com')
add = driver.find_element_by_id("ajax_button")
add.click()
source = driver.page_source

def compare_source(driver):
    try:
        return source != driver.page_source
    except WebDriverException:
        pass

WebDriverWait(driver, 5).until(compare_source)
# and now do some assertions

Это решение ни в коем случае не идеально. Попытка / исключение необходима для ситуаций, когда цикл запроса / ответа страницы задерживается в ожидании завершения какого-либо действия ajax. Если метод get_source get вызывается в середине цикла запрос / ответ, он вызывает исключение WebDriverException.

Также полезно посмотреть на тестовое покрытие для WebDriverWait .

2 голосов
/ 30 апреля 2014

Вот мой вариант ответа Грега Садецкого, введенный в функцию:

def click_n_wait(driver, button, timeout=5):
    source = driver.page_source
    button.click()
    def compare_source(driver):
        try:
            return source != driver.page_source
        except WebDriverException:
            pass
    WebDriverWait(driver, timeout).until(compare_source)

Он нажимает кнопку, ждет изменения DOM и затем возвращается.

0 голосов
/ 18 сентября 2010

Привязка Java включает класс Wait.Этот класс многократно проверяет состояние (с перерывами в режиме ожидания) до истечения времени ожидания.Если вы можете обнаружить завершение вашего Javascript с помощью обычного API, вы можете использовать тот же подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...