0

这只发生在 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'

它在 Lib/SST 文件夹中的 cases.py 文件中引用的代码如下:

    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 时,它看起来像是在尝试启动浏览器但没有成功。我的代码在假期休息之前工作,当时它似乎已经坏了。

2014 年 12 月 3 日编辑:我想补充一点,我可以在 Chrome 和 IE 中成功执行测试。此问题仅适用于 Windows 7 环境中的 Firefox。它在所有 3 个浏览器的 Mac OS 上成功执行。

4

2 回答 2

0

我认为 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))
于 2014-12-02T16:13:57.770 回答
0
  • 主要问题: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仍然可以是Noneif browser_factory.browser()returns None

于 2014-12-02T16:38:37.017 回答