python - webdriver 在 python 中等待 ajax 请求

标签 python ajax selenium webdriver

目前我正在编写用于搜索的 webdriver 测试,它使用 ajax 提供建议。如果我在输入搜索内容后和按回车键前添加显式等待,测试效果很好。

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)

失败。我正在使用 1 个虚拟 CPU 在 ec2 上运行测试。我怀疑,我什至在发送与搜索相关的 GET 请求之前就按了回车键,如果我在建议之前按回车键,它会失败。

有没有更好的方法来添加显式等待?

最佳答案

添加此方法,确保 API 响应从服务器返回

def wait_for_ajax(driver):
    wait = WebDriverWait(driver, 15)
    try:
        wait.until(lambda driver: driver.execute_script('return jQuery.active') == 0)
        wait.until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
    except Exception as e:
        pass

关于python - webdriver 在 python 中等待 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053671/

相关文章:

java - Xpath 选择元素 Selenium

python - 使用 Selenium Webdriver Python 上传文件

selenium webdriver 有没有其他方法可以在不使用 "findElements()"方法的情况下找出网页中存在的网络元素的数量?

python - 在python中返回wavfile.read的类型

python - Python 中的 'class A:' 和 'class A(object):' 有什么区别?

python - 使用 XPath 获取特定属性值

python - Pandas DataFrame 中哪些列是二进制的?

java - 附件的 HTTP 响应 header 内容处置

php - 使用 Php、Ajax、JSON 将动态记录保存在数据库中

mysql - 使用 AJAX 过滤从数据库生成的 HTML 表的行