首页 > 解决方案 > 无法将对象实例从 conftest.py 传递给测试类

问题描述

我正在尝试创建一个会话范围的夹具,它为我的套件中的每个测试类创建并传递驱动程序类的实例。我期待以下代码可以工作:

import pytest
from pages.home.home_page import HomeAdmin
from base.webdriver_factory import WebDriverFactory


@pytest.fixture(scope='session', autouse=True)
def startup(request):
    print("SESSION SET UP")
    wdf = WebDriverFactory("firefox")
    driver = wdf.get_web_driver_instance() # returns driver instance
    return driver

我期望从我的测试代码中访问驱动程序实例:

from pages.home.home_page import HomeAdmin
import unittest
import pytest

@pytest.mark.usefixtures("startup")
class HomeAdminTest(unittest.TestCase):

    @pytest.fixture(autouse=True)
    def setup(self, startup):
        print("TEST")
        self.ha = HomeAdmin(self.driver)

    def test_login(self):
        print("test run")

买这个会报错:

    @pytest.fixture(autouse=True)
    def setup(self, startup):
        print("TEST")
>       self.ha = HomeAdmin(self.driver)
E       AttributeError: 'HomeAdminTest' object has no attribute 'driver'

testcases\home\home_test.py:11: AttributeError

我一般要实现的目标:为所有测试(所有类和模块)只打开一次浏览器,然后运行各种其他类以使用相同的驱动程序实例进行操作。(我知道这不是测试的最佳实践,但这是特殊情况,我宁愿自动化一些流程而不是进行真正的测试)。

先感谢您,

沃伊切赫

标签: seleniumscopepytestfixtures

解决方案


最后我想出了如何自己解决问题。事实证明,我在测试类中以错误的方式引用了 webdriver 的实例。适当的工人阶级如下所示:

from pages.home.home_page import HomeAdmin
import unittest
import pytest

@pytest.mark.usefixtures("startup")
class HomeAdminTest(unittest.TestCase):

    @pytest.fixture(autouse=True)
    def setup(self,startup):
        print("TEST")
        self.ha = HomeAdmin(startup)

    def test_login(self):
        print("test run")

现在我可以访问我的驱动程序和用它创建的页面类。


推荐阅读