webdriver ждет запроса ajax в python

В настоящее время я пишу тест webdriver для поиска, который использует ajax для предложений. Тест работает хорошо, если я добавляю явное ожидание после ввода содержимого поиска и перед нажатием enter.

wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys("obama") time.sleep(2) wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys(Keys.RETURN) 

но

 wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys("obama") wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys(Keys.RETURN) 

выходит из строя. Я запускаю тесты на ec2 с 1 виртуальным процессором. Я подозреваю, что я нажал кнопку ввода даже до того, как отправляются запросы GET, связанные с поиском, и если я нажимаю клавишу ввода перед предложениями, это терпит неудачу.

Есть ли лучший способ добавления явного ожидания?

2 Solutions collect form web for “webdriver ждет запроса ajax в python”

Вы действительно можете добавить явное ожидание наличия такого элемента, как

 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0 ff = webdriver.Firefox() ff.get("http://somedomain/url_that_delays_loading") ff.find_element_by_xpath("//div[@class='searchbox']/input").send_keys("obama") try: element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "keywordSuggestion"))) finally: ff.find_element_by_xpath("//div[@class='searchbox']/input").send_keys(Keys.RETURN) ff.quit() 

См .: http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits

И что насчет:

  driver.implicitly_wait(10) 

для вашего примера:

  wd.implicitly_wait(10) 

В этом случае каждый раз, когда вы собираетесь щелкнуть или найти драйвер элемента, он попытается выполнить это действие каждые 0,5 секунды в течение 10 секунд. В этом случае вам не нужно добавлять wait каждый раз. Примечание. Но это только элемент на экране. Он не будет ждать окончания каких-либо действий JS.

  • Python Selenium WebDriver, как добавить таймаут для получения (url) функции
  • Как бороться со спорадическими ошибками BadStatusLine, CannotSendRequest в python WebDriver
  • Python selenium webdriver - драйвер внезапно «умирает» и не может уйти, получить current_url, открыть страницы
  • Скриншот Webdriver
  • Как установить прокси-серверы вроде этого «user: pass@6.6.6.6: 8043» в FirefoxDriver of Selenium 2?
  • Обратите внимание на новое окно в Selenium Webdriver и Python
  • Настроить реальный тайм-аут для загрузки страницы в Selenium WebDriver?
  • Как записывать видео в Selenium webdriver
  • Python - лучший язык программирования в мире.