Как исправить "TypeError: объект NoneType не вызывается"

Когда я запускаю свой скрипт:

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 ответа

Не уверен, можно ли применить параметризацию к setUp, мне удалось заставить его работать с тестовой функцией:

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

После добавления декоратора @parametrized я получал 'NoneType' object is not callable ошибка и имя теста неправильно отображались в обозревателе тестов.

После обновления методов в обозревателе тестов имя теста изменилось на test_loadPage_0_chrome и тест сработал.

Полное предположение, но я думаю, что это может быть вашей проблемой:

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

Что-то в @parameterized может не признать их как кортежи. Попробуйте добавить запятую, чтобы сделать их явно кортежами:

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

Я получал ту же ошибку при использовании 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)
Другие вопросы по тегам