Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSError:[WinError 6]句柄无效[Selenium Python]_Python_Python 3.x_Selenium_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

OSError:[WinError 6]句柄无效[Selenium Python]

OSError:[WinError 6]句柄无效[Selenium Python],python,python-3.x,selenium,selenium-webdriver,selenium-chromedriver,Python,Python 3.x,Selenium,Selenium Webdriver,Selenium Chromedriver,我一直在运行我的测试套件,当我执行套件时,我看到了这个错误消息 命令行中使用的命令: py TestSuite.py 输出: Test1 (__main__.TestSuite) ... ok Test2 (__main__.TestSuite) ... ok Test3 (__main__.TestSuite) ... ERROR Test4 (__main__.TestSuite) ... ERROR Test5 (__main__.TestSuite) ... ERROR Test6 (

我一直在运行我的测试套件,当我执行套件时,我看到了这个错误消息

命令行中使用的命令:

py TestSuite.py
输出:

Test1 (__main__.TestSuite) ... ok
Test2 (__main__.TestSuite) ... ok
Test3 (__main__.TestSuite) ... ERROR
Test4 (__main__.TestSuite) ... ERROR
Test5 (__main__.TestSuite) ... ERROR
Test6 (__main__.TestSuite) ... ERROR
Test7 (__main__.TestSuite) ... ERROR

Traceback (most recent call last):
  File "E:\Python\lib\site-packages\selenium\webdriver\chrome\service.py", line
63, in start
    self.service_args, env=env, stdout=PIPE, stderr=PIPE)
  File "E:\Python\lib\subprocess.py", line 754, in __init__
    _cleanup()
  File "E:\Python\lib\subprocess.py", line 474, in _cleanup
    res = inst._internal_poll(_deadstate=sys.maxsize)
  File "E:\Python\lib\subprocess.py", line 1147, in _internal_poll
    if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] The handle is invalid

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "FacilitySettingsConfigIdentifiers.py", line 57, in setUp
    self.driver = webdriver.Chrome(chrome_options=options)
  File "E:\Python\lib\site-packages\selenium\webdriver\chrome\webdriver.py", lin
e 59, in __init__
    self.service.start()
  File "E:\Python\lib\site-packages\selenium\webdriver\chrome\service.py", line
70, in start
    http://code.google.com/p/selenium/wiki/ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executabl
e needs to be                 available in the path. Please look at
    http://docs.seleniumhq.org/download/#thirdPartyDrivers                 and r
ead up at                 http://code.google.com/p/selenium/wiki/ChromeDriver
ChromeDriver 2.12.301325 (*some random numbers goes here*)
对所有5个有错误的测试重复这两个回溯。所以为了调试它,我使用下面的代码注释掉了所有测试,除了一个测试和一个错误,比如Test3

@unittest.skip("demonstrating skipping")
结果如下:

Test1 (__main__.TestSuite) ... skipped 'demonstrating skipping'
Test2 (__main__.TestSuite) ... skipped 'demonstrating skipping'
Test3 (__main__.TestSuite) ... ok
Test4 (__main__.TestSuite) ... skipped 'demonstrating skipping'
Test5 (__main__.TestSuite) ... skipped 'demonstrating skipping'
Test6 (__main__.TestSuite) ... skipped 'demonstrating skipping'
Test7 (__main__.TestSuite) ... skipped 'demonstrating skipping'
我对每个有错误状态的测试都这样做。所以我会跳过所有其他测试,只运行那个测试。结果与之前相同,该特定测试以OK通过,而每跳过一个测试

我确实确保chromedriver可执行文件在我的路径中。我正在使用Windows7。我可以在命令行中键入以下内容进行检查:

chromedriver -v
输出:

Test1 (__main__.TestSuite) ... ok
Test2 (__main__.TestSuite) ... ok
Test3 (__main__.TestSuite) ... ERROR
Test4 (__main__.TestSuite) ... ERROR
Test5 (__main__.TestSuite) ... ERROR
Test6 (__main__.TestSuite) ... ERROR
Test7 (__main__.TestSuite) ... ERROR

Traceback (most recent call last):
  File "E:\Python\lib\site-packages\selenium\webdriver\chrome\service.py", line
63, in start
    self.service_args, env=env, stdout=PIPE, stderr=PIPE)
  File "E:\Python\lib\subprocess.py", line 754, in __init__
    _cleanup()
  File "E:\Python\lib\subprocess.py", line 474, in _cleanup
    res = inst._internal_poll(_deadstate=sys.maxsize)
  File "E:\Python\lib\subprocess.py", line 1147, in _internal_poll
    if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] The handle is invalid

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "FacilitySettingsConfigIdentifiers.py", line 57, in setUp
    self.driver = webdriver.Chrome(chrome_options=options)
  File "E:\Python\lib\site-packages\selenium\webdriver\chrome\webdriver.py", lin
e 59, in __init__
    self.service.start()
  File "E:\Python\lib\site-packages\selenium\webdriver\chrome\service.py", line
70, in start
    http://code.google.com/p/selenium/wiki/ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executabl
e needs to be                 available in the path. Please look at
    http://docs.seleniumhq.org/download/#thirdPartyDrivers                 and r
ead up at                 http://code.google.com/p/selenium/wiki/ChromeDriver
ChromeDriver 2.12.301325 (*some random numbers goes here*)
Python版本:3.4.3。Selenium的Python绑定:2.46.0

所以我的问题是,为什么我在5个测试中看到了错误,但在前2个测试中没有看到?如果我一次只运行一个测试,而跳过其余的测试,为什么我看不到呢

更新 我尝试使用Firefox驱动程序,在执行所有测试时效果非常好。唯一不好的是,如果我的页面有任何更改,Firefox驱动程序将启动一个弹出窗口,询问我是否确定要离开页面。调用
self.driver.close()
时,Chromedriver不会这样做

根据要求,以下是帮助重新创建问题的代码片段:

# Standard Imports
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class SimpleSearchTestsInChrome(unittest.TestCase):

    # setUp runs before each test
    def setUp(self):

        # Picks chrome driver to use and will launch chrome with a maximized screen
        options = webdriver.ChromeOptions()
        options.add_argument("--start-maximized")
        self.driver = webdriver.Chrome(chrome_options=options)
        #self.driver = webdriver.Firefox()

    def test_search_in_python_org_one(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def test_search_in_python_org_two(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def test_search_in_python_org_three(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def test_search_in_python_org_four(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def test_search_in_python_org_five(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def test_search_in_python_org_six(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source        

    def test_search_in_python_org_seven(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source            

    def tearDown(self):
        self.driver.close()

if __name__ == "__main__":
    unittest.main()

如果你更新chromedriver呢?我今天刚刚更新了chromedriver。我从以下链接下载了包含.exe的最新zip版本:。然后我将exe复制到保存旧exe的地方。看起来此版本上次更新是在2015年6月5日。不知何故,我无法编辑我以前的评论。但我想补充一点修正。该文件的修改日期为2015年6月8日,而不是2015年6月5日/2015@SpartaSixZero如果看不到令人不快的代码,你整个冗长的问题毫无意义。你为什么不发布一个片段来显示错误发生的地方呢?@CoreyGoldberg当然。一旦我有空闲时间,我会按要求添加一个代码片段。