2013-04-25 1 views
1

У меня есть проблема в моей структуре, что вместо использования статических снов я стараюсь ждать видимости элемента. Дело в том, что видимость элемента проверяет наличие элемента на DOM, который вернет true, но в моей системе страница еще не загружена полностью. Случается, что как только я вернусь, проверяя видимость элемента, я устанавливаю значения. Эти значения сбрасываются, когда фактическая страница полностью загружается.Альтернатива видимости элемента, расположенного в селене 2.0, который проверяет наличие элемента на DOM?

Мой вопрос заключается в том, что я могу использовать вместо статических снов, чтобы дождаться фактической загрузки страницы (а не только DOM), поскольку видимость элемента не работает для меня?

P.S. Я использую Selenium WebDriver с питоном 2,7

/Adam

+0

Вы используете 'isDisplayed' метод? – Hemanth

+0

Нет, я использую self._wait.until (EC.visibility_of_element_located – Adam

+0

вы можете поделиться ссылкой на веб-страницу, если она не является конфиденциальной, так что мы можем отладить проблему? – Hemanth

ответ

1

Метод expected_conditions.visibility_of_element_located(locator) будет проверять оба - наличие элемента в DOM, а его видимость (элемент отображается с высотой и шириной больше нуля).

В идеале метод driver.get(url) должен автоматически дождаться загрузки полной страницы, прежде чем перейти к следующей строке. Однако это может не соответствовать ожиданиям, в случае, если тестируемое веб-приложение использует ajax-вызовы/действия (как если бы страница загружалась, но действия ajax все еще продолжаются). В таком сценарии мы можем использовать что-то вроде ниже, чтобы дождаться стабильности перед выполнением действий (действий) на требуемых веб-элементах.

# create the firefox driver 
driver = webdriver.Firefox() 

# navigate to the app url 
driver.get('http://www.google.com') 

# keep a watch on jQuery 'active' attribute 
WebDriverWait(driver, 10).until(lambda s: s.execute_script("return jQuery.active == 0")) 

# page should be stable enough now, and we can perform desired actions 
elem = WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.ID, 'id'))) 

elem.send_keys('some text') 

Надеется, что это помогает ..

1
+0

Эти вещи произойдет через пару лет, не подумайте, что это причина для downvote. Я обновил ссылку – ragamufin

+0

fab, не имел в виду (теперь удалено вниз) это как оскорбление (часто кажется, что я знаю) - просто, что ответ был уже не так полезен для сообщества. Спасибо за обновление. – artfulrobot

+0

спасибо. – ragamufin

Смежные вопросы