我已经使用带有页面对象模型的 unittest 和 pytest 实现了 selenium python 框架。我已经使用 oneTimeSetup 方法创建了一个 conftest.py 文件,该方法将初始化 webdriver,然后我的所有测试文件都将使用它。以下是我使用的方法。我已经像下面这样创建了 webdriver 工厂
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 中运行测试时出现以下错误。 命令
如果我在 conftest.py 中将 oneTimeSetup 的范围更改为“类”,则测试运行良好。但是当我添加更多测试时,我希望在单个 webdriver 会话中运行所有 mt 测试。
详细信息:Selenium Python v 3.1.41.0 Chrome 86.0.4240.111 pytest 6.0.1