selenium - 无法将对象实例从 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
我一般要实现的目标:为所有测试(所有类和模块)只打开一次浏览器,然后运行各种其他类以使用相同的驱动程序实例进行操作。(我知道这不是测试的最佳实践,但这是特殊情况,我宁愿自动化一些流程而不是进行真正的测试)。
先感谢您,
沃伊切赫
解决方案
最后我想出了如何自己解决问题。事实证明,我在测试类中以错误的方式引用了 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")
现在我可以访问我的驱动程序和用它创建的页面类。
推荐阅读
- keras - 保存和加载 BayesSearchCV 训练的模型 - TypeError: can't pickle _thread.RLock objects
- ngxs - 如何在组件中实现 ngxsOnChanges
- python - 在 pandas 数据框中填写缺失的小时数
- html - 带有视差滚动的标题图像未在移动设备上加载。这可能是什么原因造成的?
- python - Graphviz 面临的问题
- java - Java 8 Streams 将 String 映射到 MyObject
- css - 在 Chrome 中捕捉滚动 CSS 太快/跳跃,但在其他任何地方都可以正常工作
- django - rest_framework.permissions.IsAuthenticated 永远不会执行
- java - 如何在 Java 中使 REST 调用异步
- azure - 用于解码 Azure AD 的公钥(所有 microsoft 帐户)访问令牌