如何修复" TypeError:' NoneType'对象不可调用"

时间:2016-09-29 09:42:53

标签: python selenium nose-parameterized

当我运行我的脚本时:

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

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

3 个答案:

答案 0 :(得分:0)

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

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

@parameterized中的某些内容可能无法将其视为元组。尝试添加逗号以明确表示元组:

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

答案 1 :(得分:0)

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

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

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

在刷新测试资源管理器中的方法后,测试名称的格式设置为test_loadPage_0_chrome并且测试有效。

答案 2 :(得分: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)