当 oneTimeSetup 方法具有夹具范围 = "session" 时出错



我已经使用页面对象模型的unittest和pytest实现了selenium-python框架。我用oneTimeSetup方法创建了一个conftest.py文件,它将初始化网络驱动程序,然后它将被我的所有测试文件使用。以下是我使用的方法。我在下面创建了这样的网络驱动程序工厂

WebDriverFactory.py:

from selenium import webdriver
class WebDriverFactory():
def __init__(self,browser):
self.browser = browser
def get_browser_instance(self):
if self.browser == "FF":
driver = webdriver.Firefox()
elif self.browser == "Chrome":
driver = webdriver.Chrome()
elif self.browser == "IE":
driver = webdriver.Ie()
else:
driver = webdriver.Chrome()

baseUrl = "http://live.demoguru99.com/index.php/"
driver.delete_all_cookies()
driver.maximize_window()
driver.implicitly_wait(5)
driver.get(baseUrl)
return driver

conftest.py:

import pytest
from base.WebDriverFactory import WebDriverFactory
def pytest_addoption(parser):
parser.addoption("--browser")
@pytest.fixture(scope="session")
def browser(request):
return request.config.getoption("--browser")
@pytest.fixture(scope="session")
def oneTimeSetup(request,browser):
print("This is one time setup")
wdf = WebDriverFactory(browser)
driver = wdf.get_browser_instance()
if request.cls is not None:
request.cls.driver = driver
yield driver
driver.quit()

下面是我的测试文件:

from pages.mobile_page.mobile_page import MobilePage
from utilities.mark_test_status import MarkTestStatus
import unittest
import pytest
@pytest.mark.usefixtures("oneTimeSetup")
class TestMobile(unittest.TestCase):
@pytest.fixture(autouse=True)
def classObject(self,oneTimeSetup):
self.mb = MobilePage(self.driver)
self.ts = MarkTestStatus(self.driver)
def test_Mobile(self):
result = self.mb.mobile()
self.ts.finalMark(testcase="Mobile Sort By test",result=result,resultMessage="Testing Mobile SOrt functionality")

在cmd中运行测试时,我收到以下错误。cmd

如果我将oneTimeSetup的范围更改为";类";在conftest.py中,测试运行良好。但当我添加更多测试时,我希望在一个网络驱动程序会话中运行所有mt测试。

详细信息:Selenium Python 3.1.41.0铬86.0.4240.111pytest 6.0.1

oneTimeSetup fixture是会话级别的,会话级别的请求参数不具有cls属性。因此,与其像这个那样访问request.cls

if request.cls is not None:
request.cls.driver = driver

使用request.node.items和setattr来处理像这样的单个项目

session = request.node
for item in session.items:
cls = item.getparent(pytest.Class)
setattr(cls.obj, "driver", driver)

相关内容

最新更新