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,

Другие вопросы по тегам