Как исправить "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)