【问题标题】:Cannot pass object instance from conftest.py to a test class无法将对象实例从 conftest.py 传递给测试类
【发布时间】:2019-10-26 15:07:40
【问题描述】:

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

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

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

提前谢谢你,

沃伊切赫

【问题讨论】:

    标签: selenium scope pytest fixtures


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 2011-10-09
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多