MaxRetryError: HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError('Connection aborted.', error(111, 'Connection denied'))) [英] MaxRetryError: HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused')))
问题描述
我有一个问题:我想测试选择"和输入".我可以像下面的代码一样编写它:原始代码:
I have one question:I want to test "select" and "input".can I write it like the code below: original code:
12 class Sinaselecttest(unittest.TestCase):
13
14 def setUp(self):
15 binary = FirefoxBinary('/usr/local/firefox/firefox')
16 self.driver = webdriver.Firefox(firefox_binary=binary)
17
18 def test_select_in_sina(self):
19 driver = self.driver
20 driver.get("https://www.sina.com.cn/")
21 try:
22 WebDriverWait(driver,30).until(
23 ec.visibility_of_element_located((By.XPATH,"/html/body/div[9]/div/div[1]/form/div[3]/input"))
24 )
25 finally:
26 driver.quit()
# #测试select功能
27 select=Select(driver.find_element_by_xpath("//*[@id='slt_01']")).select_by_value("微博")
28 element=driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/div[3]/input")
29 element.send_keys("杨幂")
30 driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/input").click()
31 driver.implicitly_wait(5)
32 def tearDown(self):
33 self.driver.close()
我想测试 Selenium 选择"功能.所以我选择sina网站选择一个选项并在textarea中输入文本.然后搜索它.但是当我运行这个测试时,它有错误:
I want to test Selenium "select" function.so I choose sina website to select one option and input text in textarea.then search it .but when I run this test,it has error:
Traceback (most recent call last):
File "test_sina_select.py", line 32, in tearDown
self.driver.close()
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 688, in close
self.execute(Command.CLOSE)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 376, in execute
return self._request(command_info[0], url, body=data)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 399, in _request
resp = self._conn.request(method, url, body=body, headers=headers)
File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 68, in request
**urlopen_kw)
File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 81, in request_encode_url
return self.urlopen(method, url, **urlopen_kw)
File "/usr/lib/python2.7/site-packages/urllib3/poolmanager.py", line 247, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen
release_conn=release_conn, **response_kw)
File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen
release_conn=release_conn, **response_kw)
File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen
release_conn=release_conn, **response_kw)
File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 597, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python2.7/site-packages/urllib3/util/retry.py", line 271, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=51379): Max retries exceeded with url: /session/2e64d2a1-3c7f-4221-96fe-9d0b1c102195/window (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused')))
----------------------------------------------------------------------
Ran 1 test in 72.106s
谁能告诉我为什么?谢谢
who can tell me why?thanks
推荐答案
此错误信息...
MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=51379): Max retries exceeded with url: /session/2e64d2a1-3c7f-4221-96fe-9d0b1c102195/window (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused')))
...暗示对 self.driver.close()
方法的调用失败引发 MaxRetryError.
几点:
首先,根据讨论最大重试次数超出的异常令人困惑 traceback 有点误导.为方便用户,请求包装了异常.原始异常是显示消息的一部分.
First and foremost as per the discussion max-retries-exceeded exceptions are confusing the traceback is somewhat misleading. Requests wraps the exception for the users convenience. The original exception is part of the message displayed.
请求从不重试(它为 urllib3 的 HTTPConnectionPool
设置了 retries=0
),所以如果没有 MaxRetryError 错误会更规范 和 HTTPConnectionPool 关键字.所以理想的回溯应该是:
Requests never retries (it sets the retries=0
for urllib3's HTTPConnectionPool
), so the error would have been much more canonical without the MaxRetryError and HTTPConnectionPool keywords. So an ideal Traceback would have been:
ConnectionError(<class 'socket.error'>: [Errno 1111] Connection refused)
但是@sigmavirus24 在他的评论中再次提到...包装这些异常会产生很棒的 API,但调试体验很差...
推进计划是尽可能向下遍历到最低级别的异常并改用它.
最后通过改写一些与实际连接被拒绝错误无关的异常来解决这个问题.
Finally this issue was fixed by rewording some exceptions which has nothing to do with the actual connection refused error.
即使在调用 tearDown(self)
中的 self.driver.close()
之前, 中的 try{} 块test_select_in_sina(self)
包括 finally{} 您在其中调用了 driver.quit()
用于调用 /shutdown端点,然后是 Web 驱动程序 &客户端实例被完全销毁,关闭所有页面/选项卡/窗口.因此不再存在连接.
Even before self.driver.close()
within tearDown(self)
is invoked, the try{} block within test_select_in_sina(self)
includes finally{} where you have invoked driver.quit()
which is used to call the /shutdown endpoint and subsequently the web driver & the client instances are destroyed completely closing all the pages/tabs/windows. Hence no more connection exists.
您可以在以下位置找到一些相关的详细讨论:
You can find a couple of relevant detailed discussion in:
在这种情况下,当您调用 self.driver.close()
时,python 客户端无法找到任何活动连接来启动 closure.因此您会看到错误.
In such a situation when you invoke self.driver.close()
the python client is unable to locate any active connection to initiate a clousure. Hence you see the error.
所以一个简单的解决方案是删除 driver.quit()
行,即删除 finally
块.
So a simple solution would be to remove the line driver.quit()
i.e. remove the finally
block.
根据 Selenium 3.14.1 的发行说明:
* Fix ability to set timeout for urllib3 (#6286)
Merge是:修复urllib3无法设置超时!
升级到 Selenium 3.14.1 后,您将能够设置超时并查看规范的回溯,并能够采取必要的操作.
Once you upgrade to Selenium 3.14.1 you will be able to set the timeout and see canonical Tracebacks and would be able to take required action.
几个相关的参考:
这篇关于MaxRetryError: HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError('Connection aborted.', error(111, 'Connection denied')))的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!