我正在尝试创建一个会话范围固定装置,该装置为我套件中的每个测试类创建并传递驱动程序类的实例。我期望以下代码可以工作:
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
答案 0 :(得分: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")
现在,我可以访问使用它创建的驱动程序和页面类。