AttributeError: объект 'NoneType' не имеет атрибута 'name' при выполнении в SST Python
ЭТО ПРОИСХОДИТ ТОЛЬКО В FIREFOX: В предыдущем вопросе я столкнулся с проблемой, когда SST 0.2.4 не совместим с Selenium 2.44.0. Поэтому я опустился до Selenium 2.43.0. Теперь у меня есть новый вопрос, который я запутался. Я получаю следующее сообщение об ошибке:
_StringException: Traceback (most recent call last):
File "C:\Python27\lib\site-packages\sst\cases.py", line 75, in setUp
self.start_browser()
File "C:\Python27\lib\site-packages\sst\cases.py", line 107, in start_browser
logger.debug('Browser started: %s' % (self.browser.name))
AttributeError: 'NoneType' object has no attribute 'name'
Код, на который он ссылается в файле case.py в папке Lib / SST, приведен ниже:
def start_browser(self):
max_attempts = 5
for nb_attempts in range(1, max_attempts):
try:
logger.debug('Starting browser (attempt: %d)' % (nb_attempts,))
self._start_browser()
break
except exceptions.WebDriverException:
if nb_attempts >= max_attempts:
raise
logger.debug('Browser started: %s' % (self.browser.name))
Мой код выглядит следующим образом:
import unittest
from sst.actions import *
from sst import cases, config, browsers
class TestMyTest(cases.SSTTestCase):
def test_mytestcase_home_page(self):
config.results_directory = "C:/Users/Brenda/test/SST-Test-Project/results"
go_to('http://www.myhomepage.com')
assert_title_contains('My Home Page')
take_screenshot(filename='home_page.png',add_timestamp=True)
assert_element(tag='a', text='Log in')
Я продолжаю думать, что решение этого довольно простое, но я не могу обернуться вокруг него.
Я также добавлю примечание, что при запуске sst-run MySSTTest в командной строке, похоже, что он пытается запустить браузер безуспешно. Мой код работал до перерыва, когда он, кажется, сломался.
Отредактировано 3 декабря 2014: я хотел добавить, что я могу успешно выполнить тест в Chrome и IE. Эта проблема связана только с Firefox в среде Windows 7. Он был успешно выполнен на Mac OS во всех 3 браузерах.
2 ответа
Я думаю, что коды Case.py имеет возможность не может получить объект браузера, когда он запускается _start_browser
метод
def _start_browser(self):
self.browser_factory.setup_for_test(self)
self.browser = self.browser_factory.browser()
def start_browser(self):
max_attempts = 5
for nb_attempts in range(1, max_attempts):
try:
logger.debug('Starting browser (attempt: %d)' % (nb_attempts,))
self._start_browser()
break
except exceptions.WebDriverException:
if nb_attempts >= max_attempts:
raise
logger.debug('Browser started: %s' % (self.browser.name))
Главная проблема:
if nb_attempts >= max_attempts:
не имеет никакого эффектаnb_attempts
идет только доmax_attempts-1
, я хотел бы использоватьcontinue
и повторно поднять исключение вelse
пункт вместо:logger.debug('Starting browser') e = None for _ in range(max_attempts): try: self._start_browser() break except exceptions.WebDriverException,e: continue else: raise e
("
_
"идиома для неиспользуемой переменной)Даже с этим исправлением,
self.browser
все еще может бытьNone
еслиbrowser_factory.browser()
возвращаетсяNone
,