-3

当我运行我的脚本时:

from selenium import webdriver
# from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import os
import pytest
import unittest
from nose_parameterized import parameterized

    class multiBrowsers(unittest.TestCase):
        @parameterized.expand([
            ("chrome"),
            ("firefox"),
        ])

        def setUp(self, browser):

            if browser == "firefox":
                caps = DesiredCapabilities.FIREFOX
                caps["marionette"] = True
                caps["binary"] = "/Applications/Firefox.app/Contents/MacOS/firefox-bin"
                self.driver = webdriver.Firefox(capabilities=caps)
            elif browser == "chrome":
                self.driver = webdriver.Chrome()

        def test_loadPage(self):
            driver = self.driver
            driver.get("http://www.google.com")

        def tearDown(self):
            self.driver.quit()

我得到错误:

Error
TypeError: 'NoneType' object is not callable

我读到我没有正确传递一些东西,但我不知道去哪里看。在此先感谢您的帮助!

4

3 回答 3

1

不确定参数化是否可以应用于setUp,我设法让它与测试功能一起工作:

@parameterized.expand([
    ("chrome"),
    ("firefox"),
])
def test_loadPage(self, browser):

添加 @parametrized 装饰器后,我收到'NoneType' object is not callable错误,并且测试名称在测试资源管理器中未正确显示。

在测试资源管理器中刷新方法后,测试名称被格式化test_loadPage_0_chrome并测试工作。

于 2019-08-01T15:57:54.513 回答
0

将 parametrized.expand 与 unittest.TestCase 类一起使用时,我遇到了同样的错误。在构建西装参数化时,测试 _0、_1 就足够了,因此如果您手动将测试添加到套件中,则会引发此错误。最好的解决方案是使用,

suite = unittest.TestSuite()
testloader = unittest.TestLoader()
testnames = testloader.getTestCaseNames(t_class)
for name in testnames:
    suite.addTest(t_class(name))
runner = unittest.TextTestRunner(verbosity=2)
于 2021-01-07T19:04:47.920 回答
0

总猜测,但我认为这可能是你的问题:

@parameterized.expand([
    ("chrome"),
    ("firefox"),
])

有些东西@parameterized可能不会将它们识别为元组。尝试添加逗号以使它们成为明确的元组:

@parameterized.expand([
    ("chrome", ),
    ("firefox", ),
])
于 2016-09-30T02:44:32.763 回答