0

我已经使用带有页面对象模型的 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

4

1 回答 1

0

oneTimeSetup 夹具是会话级别的,因此请求参数没有 cls 属性。如果你想 s 所以而不是像这样访问 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)
于 2021-11-02T12:26:52.053 回答