Python 在pytest中找不到获取夹具
我在使用以下代码运行pytest时遇到以下错误,我无法找出错误所在,请查找下面的代码片段 控制台输出:Python 在pytest中找不到获取夹具,python,selenium,pytest,Python,Selenium,Pytest,我在使用以下代码运行pytest时遇到以下错误,我无法找出错误所在,请查找下面的代码片段 控制台输出: ================================================= test session starts ================================================= platform win32 -- Python 3.7.2, pytest-4.2.0, py-1.7.0, pluggy-0.8.1 rootdir:
================================================= test session starts =================================================
platform win32 -- Python 3.7.2, pytest-4.2.0, py-1.7.0, pluggy-0.8.1
rootdir: D:\Workspace\AutomationProject, inifile:
plugins: cov-2.6.1, allure-pytest-2.5.5
collected 1 item
tests\pages\test.py E [100%]
======================================================= ERRORS ========================================================
__________________________________________ ERROR at setup of test.test_test ___________________________________________
file D:\Workspace\AutomationProject\tests\pages\test.py, line 5
def test_test(self):
E fixture 'web_driver' not found
> available fixtures: _UnitTestCase__pytest_class_setup, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, cov, doctest_namespace, monkeypatch, no_cover, pytestconfig, record_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
> use 'pytest --fixtures [testpath]' for help on them.
D:\Workspace\AutomationProject\tests\pages\test.py:5
=============================================== 1 error in 0.12 seconds ===============================================
我的基类包含以下代码:
from selenium import webdriver
import pytest
import unittest
@pytest.fixture(scope="class")
def web_driver(request):
driver = webdriver.Chrome("C:/chromedriver.exe")
request.cls.driver = driver
yield
web_driver.close()
@pytest.mark.usefixtures("web_driver")
class Base(unittest.TestCase):
'''
This fixture contains the set up and tear down code for each test.
'''
pass
from core.web.Base import Base
class test(Base):
def test_test(self):
self.driver.get("http://google.com")
测试类包含以下代码:
from selenium import webdriver
import pytest
import unittest
@pytest.fixture(scope="class")
def web_driver(request):
driver = webdriver.Chrome("C:/chromedriver.exe")
request.cls.driver = driver
yield
web_driver.close()
@pytest.mark.usefixtures("web_driver")
class Base(unittest.TestCase):
'''
This fixture contains the set up and tear down code for each test.
'''
pass
from core.web.Base import Base
class test(Base):
def test_test(self):
self.driver.get("http://google.com")
测试夹具是web_驱动程序,但仍然未找到错误 web\u driver()
是在Base
类范围之外定义的,因此它对于usefixtures
是不可见的,因为它是test
类范围的一部分。可以,但我认为更好的解决方案是将web\u驱动程序
移动到Base
@pytest.mark.usefixtures("web_driver")
class Base(unittest.TestCase):
@pytest.fixture(scope="class")
def web_driver(self, request):
driver = webdriver.Chrome("C:/chromedriver.exe")
request.cls.driver = driver
yield
driver.close()
作为旁注,它应该是
driver.close()
,而不是web\u driver.close()
解决方案有效,但为什么我们不能在类外使用它在同一个文件中?@user1323a更新了我的答案。当我在两个类中扩展基类并尝试运行测试时,我使用此设备运行测试时,我收到错误:无法建立新连接:[WinError 10061]无法建立连接,因为目标计算机主动拒绝了它“但是当运行单个类时,它运行良好,这是基类问题吗?@user1323a您并行运行测试吗?”?如果您按照预期这样做,您需要使用一些并行机制(例如Selenium Grid),当我注释掉driver.close行并运行时,问题得到解决。我认为问题在于it驱动程序关闭,然后调用驱动程序,但我如何在不注释驱动程序的情况下实现这一点。关闭,因为它在所有测试中使用相同的驱动程序我如何为我尝试更改范围的每个测试打开浏览器