Python 硒:don';不要等待异步资源

Python 硒:don';不要等待异步资源,python,unit-testing,selenium,selenium-webdriver,Python,Unit Testing,Selenium,Selenium Webdriver,Selenium在进入新页面之前等待异步资源调用 前 在一个有许多外部API的网站上(如Google Analytics和来自G+、Facebook和Twitter的共享按钮)。Selenium等待异步调用的时间比运行测试的时间要长 是否有任何方法可以禁用此行为,以便selenium不等待异步外部api调用?您所看到的正在运行。您可以调整它并处理超时异常: try: driver.set_page_load_timeout(5) # in seconds except Timeou

Selenium在进入新页面之前等待异步资源调用


在一个有许多外部API的网站上(如Google Analytics和来自G+、Facebook和Twitter的共享按钮)。Selenium等待异步调用的时间比运行测试的时间要长

是否有任何方法可以禁用此行为,以便selenium不等待异步外部api调用?

您所看到的正在运行。您可以调整它并处理超时异常:

try:
    driver.set_page_load_timeout(5)  # in seconds
except TimeoutException:
    pass

# continue with testing
除此之外,您还可以添加等待某个所需的“action”元素出现的命令,以便在该元素出现后立即继续测试


您还可以通过阻止对某些域的请求来优化它,这些域与您的测试无关,不会影响页面呈现,也不会影响您的测试。例如,如果要阻止Google Analytics请求:

您还可以禁用图像、CSS或flash(如果适用于您的情况):


使用以下代码,您无需等待加载完整页面来进行任何处理(即查找元素函数)


更多详细信息:

当页面加载时间过长时,会引发错误。我希望selenium即使未加载异步资源也能继续执行代码和加载页面。@PaintingAir好的,您看到了什么错误?你能提供一个可复制的例子吗?谢谢。设置较低的页面加载超时会导致超时异常。根据selenium文档,这是driver.set\u page\u load\u timeout的目的。你答案的第二部分是正确的。由于我正在加载的所有异步资源都是外部的,因此它实现了相同的效果,而没有显式地解决等待异步调用的问题。@paintingair很好,但是为什么不处理并忽略超时异常并继续测试呢?谢谢@paintingair处理这一问题的“正确”方法确实是阻止外部资源调用。这就是(或应该是)答案的要点。如何实现这一点的机制可能很复杂,尽管我可能会依赖代理。“懒惰”的方法是设置页面加载超时,然后捕获并忽略异常,然后点击超时。答案中缺少的一点是,如果执行超时路径,则必须捕获并忽略异常。
try:
    driver.set_page_load_timeout(5)  # in seconds
except TimeoutException:
    pass

# continue with testing
FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("webdriver.load.strategy", "unstable");
WebDriver driver = new FirefoxDriver(fp);