当前位置: 首页 > 知识库问答 >
问题:

oneTimeSetup方法具有fixture scope=“会话”时出错

嵇光临
2023-03-14

我使用unittest和pytest以及页面对象模型实现了selenium python框架。我创建了一个conftest。使用oneTimeSetup方法的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中运行测试时,我得到以下错误。cmd

如果我在conftest中将oneTimeSetup的范围更改为“class”。py,测试运行正常。但当我添加更多测试时,我希望在单个webdriver会话中运行所有mt测试。

详细信息:Selenium Python v 3.1.41.0 Chrome 86.0.4240.111 pytest 6.0.1

共有1个答案

李捷
2023-03-14

oneTimeSetup fixture是会话级别,会话级别请求参数没有cls属性。而不是访问请求。像这样的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)
 类似资料:
  • 我想在我的应用程序中实现会话。这是我的代码: 但它返回错误: C:\User\User\Desktop\manajemen-event-master\node_modules\express\lib\application.js:210抛出新的TypeError('app.use()需要中间件函数');^ TypeError:_extensions()需要中间件函数在EventE_load(C:\

  • 我有一个方法要调用一个存储函数。我希望它异步地完成它的工作。这就是我所拥有的,但似乎.doWork()从未启动,因为当我调用<code>getDao时。deleteAll(),存储的函数不运行。 我看到记录器已经记录了,但它从未到达为什么会发生这种情况?

  • 在我的Vaadin应用程序中,当Vaadin在“session Timeout”消息之后没有使会话无效时,我遇到了一个问题。收到此消息后,用户有时可以单击链接或刷新页面,并继续工作,就像他们仍在登录一样。我使用以下参数: Last参数(session-timeout)也在context.xml(session-timeout=900)和web.xml(session-config/session-

  • 我最近安装了一个用于开发测试的selenium网格环境。然而,我们面临以下错误: 转发新会话时出错,无法找到:功能{browserName:chrome,chromeOptions:{args:[--headless,--no sandbox],二进制:,首选项:{plugins.always\u open\u pdf\u externally:true},w3c:false},loggingPr

  • 我的selenium配置有问题。我正在尝试在iOS和Android上自动化Selenium测试。 iOS测试独立于iOS驱动程序正常运行。Android测试也在独立正常运行。 但是当我想运行iOS和Android时,我遇到了问题! 对于我的Android测试,我正在运行这个命令,一切都很好: 但是,当我想要集成iOS测试时,我会按照以下指南更改此命令的端口:http://selendroid.io

  • 问题内容: 我从这里选择了最新的2.45.0 。遵循文档并使用以下命令启动集线器 并且,文件内容为: 而且,唯一的 到目前为止,一切看起来都很不错。在这里注册后,请查看控制台的屏幕截图 而且,当我尝试通过以下方式开始测试时,问题就开始了: 而且,它抛出: WebDriver.dll中发生类型’System.InvalidOperationException’的异常,但未在用户代码中处理 附加信息: