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')))

查看:34
本文介绍了MaxRetryError: HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError('Connection aborted.', error(111, 'Connection denied')))的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题:我想测试选择"和输入".我可以像下面的代码一样编写它:原始代码:

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.

几点:

  • 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 在他的评论中再次提到...包装这些异常会产生很棒的 AP​​I,但调试体验很差...

    推进计划是尽可能向下遍历到最低级别的异常并改用它.

    最后通过改写一些与实际连接被拒绝错误无关的异常来解决这个问题.

    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() 时, 客户端无法找到任何活动连接来启动 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屋!

  • 查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆