无法将对象实例从conftest.py传递到测试类

问题描述 投票:0回答:1

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

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

我通常要实现的目标:对于所有测试(所有类和模块),只打开浏览器一次,然后运行其他各种类以使用同一驱动程序实例进行操作。 (我知道这不是测试的最佳实践,但这是特殊情况,与实际测试相比,我将使某些过程实现自动化)。

提前谢谢您,

Wojciech

selenium scope pytest fixtures
1个回答
0
投票

最后,我想出了自己解决问题的方法。原来,我在测试类中以错误的方式引用了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")

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

© www.soinside.com 2019 - 2024. All rights reserved.