如何解决是什么导致OSError:python的selenium软件包中的错误文件描述符错误?
我使用selenium来运行django测试,我以前从未遇到过此错误。我无处不在,成百上千的测试开始失败(尽管奇怪的是,并非所有测试都失败了,而且不一致-如果我一次运行一个测试,它们运行得很好。)我不知道为什么会开始失败,因为没有改变我的环境。
从下面的回溯中看,设置Webdriver时似乎抛出了错误。有人曾经遇到过这种硒错误,有人知道如何解决吗?
我正在使用selenium == 3.141.0和python 3.6.3
以下是运行测试时错误的根源:
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from django.test import Client
from rest_framework.test import apiclient
class ViewTestCase(StaticLiveServerTestCase):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.test_client = Client()
self.api_client = apiclient()
def setUp(self):
super().setUp()
self.selenium = webdriver.Chrome()
self.selenium.set_window_size(1200,678)
self.selenium.implicitly_wait(5)
self.open_page()
def tearDown(self):
self.selenium.quit()
super().tearDown()
def open_page(self):
self.selenium.get('{}/{}'.format(self.live_server_url,self.page_url))
错误跟踪日志:
Traceback (most recent call last):
File "/Users/daniellong/Documents/Coding/GrubBase/GrubBase/tests/__init__.py",line 174,in setUp
self.selenium = webdriver.Chrome()
File "/Users/daniellong/Documents/Coding/GrubBase/venv/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py",line 73,in __init__
self.service.start()
File "/Users/daniellong/Documents/Coding/GrubBase/venv/lib/python3.6/site-packages/selenium/webdriver/common/service.py",line 76,in start
stdin=PIPE)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py",line 709,in __init__
restore_signals,start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py",line 1344,in _execute_child
raise child_exception_type(errno_num,err_msg,err_filename)
OSError: [Errno 9] Bad file descriptor
解决方法
此错误消息...
Traceback (most recent call last):
File "/Users/daniellong/Documents/Coding/GrubBase/GrubBase/tests/__init__.py",line 174,in setUp
self.selenium = webdriver.Chrome()
File "/Users/daniellong/Documents/Coding/GrubBase/venv/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py",line 73,in __init__
.
.
raise child_exception_type(errno_num,err_msg,err_filename)
OSError: [Errno 9] Bad file descriptor
以及您评论中的观察结果 ...错误不一致地发生。仅当我运行完整的测试套件时才会发生。如果我自己进行测试,则运行正常。...
...表示 ChromeDriver 无法间歇地启动/产生新的浏览上下文即 Chrome浏览器会话。
大概您的观察表明您的代码是完美无瑕的,但是问题出在退出 Chrome 浏览器并重新初始化。通常,当您尝试用来启动新会话的套接字文件描述符遇到OSError: [Errno 9] Bad file descriptor
时无效,这可能有多种原因:
- 文件描述符已在某个位置关闭。
- 文件描述符不一致。
- 您的系统是out of memory。
内存使用情况的快照可以帮助我们更好地分析问题。但是,通用方法是:
- 在
driver.quit()
方法中调用tearDown(){}
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。 - 清除执行 Test Suite 之前和之后的所有操作系统杂项。
- Free Up and Release the Unused/Cached Memory in Ubuntu/Linux Mint在执行 Test Suite 之前和之后。
参考文献
您可以在以下位置找到几个相关的详细讨论:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。