我正在尝试使用Page Objects Models用于模式设计,使用pytest和Selenium创建一个测试套件。为了在测试中使用页面类,我只是将它们导入了TestClass __init__
方法中,因为它们需要使用驱动程序进行实例化。
我知道,默认情况下,pytest使用__init__
方法忽略类。我也知道,通过阅读here可以配置pytest收集测试的位置。是否还可以考虑使用__init__
进行类测试,而不是返回“空套件”错误?
@pytest.fixture(scope="session")
def driver_init(request):
from selenium import webdriver
driver = webdriver.Chrome()
session = request.node
page = PageFunctions(driver)
login_page = LoginPage(driver)
registration_page = RegistrationPage(driver)
for item in session.items:
cls = item.getparent(pytest.Class)
setattr(cls.obj, "driver", driver)
setattr(cls.obj, "page", page)
setattr(cls.obj, "login", login_page)
setattr(cls.obj, "registration", registration_page)
答案 0 :(得分:0)
Pytest和Unittest有一些不同的约定。通常应该避免将两者混用在同一测试功能中。
如果您仅使用Pytest,则可以将固定装置作为测试函数的参数传递,例如:
import pytest
from selenium import webdriver
@pytest.fixture
def driver():
driver = webdriver.Chrome()
return driver
def test_func(driver):
# `driver` is found by pytest in the fixture above and
# automatically passed in
request = ... # Instantiate your request (not in your included code)
session = request.node
page = PageFunctions(driver)
login_page = LoginPage(driver)
registration_page = RegistrationPage(driver)
# Make some assertions about your data, e.g.:
assert page is not None
您还没有包括所有的对象定义/导入,因此很难看到您要通过测试完成什么,但是希望可以使您对pytest约定有所了解。