首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命令之间睡眠5秒的情况下,Selenium

在命令之间睡眠5秒的情况下,Selenium
EN

Stack Overflow用户
提问于 2018-08-17 12:57:00
回答 1查看 681关注 0票数 2

我的Selenium-WebDriver + Python脚本工作得很好,但是如果在webdriver命令之间有太多的时间,则给出一个ConnectionAbortedError

下面的最低工作示例给出了一个错误:

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver import Firefox
import time

browser = webdriver.Firefox()
browser.get('http://www.google.com/')
searchfield = browser.find_element_by_id("lst-ib") 
time.sleep(5) 
browser.close() # -> ConnectionAbortedError

如果没有5秒的睡眠,就没有错误:

代码语言:javascript
复制
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
searchfield = browser.find_element_by_id("lst-ib")
browser.close()

似乎没有其他人有这个问题..。连接在几秒钟后丢失是正常的吗?还是我做错什么了?

我尝试过使用implicitly_wait和set_script_timeout,但是增加这些超时并不能解决问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 08:45:23

ConnectionAbortedError

您将ConnectionAbortedError视为keep-alive connection的默认超时是5s

根据讨论中的@andreastt的评论使用Selenium客户端,在没有重新连接的情况下,在不活动5s之后,与geckodriver0.21.0的连接保持活动。 GekcoDriver v0.21.0切换到使用HTTP/1.1保持活动连接

正如您所提到的,ConnectionAbortedError,如果webdriver命令之间有5秒钟的睡眠,则由@whimboo的评论确认,他在其中提到:

看起来,保持活动连接的默认超时是5s。不幸的是,一旦这一次过去了,连接就不能正确地重新实例化。

以下是对为什么是5s?的引用

GeckoDriver团队可能不得不将这个超时设置为一个正常的值,但另一方面,客户端还必须在出现故障时创建一个新的连接。预期是客户端在使用之前需要检查连接是否仍然处于活动状态。当连接在停止活动5秒后最终被服务器关闭时,客户端需要建立一个新的连接。不过,增加保持生命超时的持续时间是很有意义的。对于自动化测试人员来说,通常的做法是等待5秒来完成操作,或者等待5秒线程休眠来等待测试中出现/可见的元素。

但是,将Keep-Alive connection timeout限制到更高的值并不能解决根本问题,因为WebDriver客户端在支持保持活的连接中提到的处理HTTP连接时存在缺陷。

AutomatedTester @AutomatedTester提到:

这个问题并不是因为我们在执行请求时没有连接。如果这是问题所在,我们就会抛出一个httplib.HTTPConnection异常。相反,当我们执行连接并关闭它并尝试解析响应时,会抛出一个BadStatusLine。现在,这可能是python bug、httplib bug或selenium bug,需要进行研究。

@andreastt补充说:

HTTPD的Keep-Alive超时值与此问题正交。众所周知,Selenium Python客户端使用的urllib所使用的Python2.7标准库不符合HTTP/1.1。增加服务器超时会减轻这一点,但不能解决根本问题,即Python中的HTTP库有一个缺陷。 这个问题似乎在最近的Python版本中得到了解决。当我们研究这个问题时,我们还发现构建在urllib之上的各种HTTP库,例如请求,可以使用各种机制(比如特殊的大小写BadStatusLine异常和重新连接)来解决这个问题。 Selenium正在为Python开发一个修补程序,将urllib替换为与Keep-Alive连接没有相同缺陷的东西。这项工作可以在Urllib3中跟踪。 同时,geckodriver团队正在努力将服务器端超时值扩展到更合理的值。正如我所说,这将有助于缓解这一问题,但不能从根本上解决这个问题。在任何情况下,5秒可能太低,无法从持久HTTP连接中获得真正的好处,并且将其提高到大约60秒将具有更好的性能。

您可以在讨论Keep-Alive中跟踪增加服务器增加保持活动的连接删除超时超时的工作。

解决方案

将您的测试环境升级到使用Selenium v3.14.0可能会解决您的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51895959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档