【问题标题】:Django Selenium liveserver doesn't get started when running tests运行测试时,Django Selenium liveserver 无法启动
【发布时间】:2014-10-02 01:28:30
【问题描述】:

我正在构建一个 Django 网站,并且我正在使用 Selenium 来测试我的页面。我的问题是,当我运行测试时,浏览器启动,但没有加载页面,甚至没有尝试加载。它只是打开空白并且测试挂起。在我看来,liveserver 没有启动。我在 Apache2 和 WSGI 上运行,但我的理解是 Selenium 测试是由 Django 的内置 Web 服务器运行的。知道有什么问题吗?相关文件如下:

tests.py:

from selenium.webdriver.firefox.webdriver import WebDriver

class MyProjectLiveServerTestCase(LiveServerTestCase):

    @classmethod
    def initSeleniumDriver(cls):
        cls.driver = WebDriver()

    @classmethod
    def closeSeleniumDriver(cls):
        cls.driver.quit()

    def testIndexShouldLoad(self):
        self.driver.get('%s%s' % (self.live_server_url, '/nd5/mybook/'))
        self.assertEqual(len(self.driver.find_elements(
            By.CSS_SELECTOR,
            'span#copyright'
        )), 1)

settings.py:

# Test database runs on SQLite
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(os.path.realpath(os.path.dirname(__file__)), '..', 'myprojectdb'),
    }
}

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

我正在使用 django-nose,所以我以这种方式执行测试:

python manage.py test --exe

如果您需要查看代码的任何其他部分,请告诉我。

更新:

这里是更新:我发现 Firefox 不加载页面的原因是因为我的 Firefox 版本比 Selenium 支持的最新版本更新。所以我切换到 Chrome,现在请求浏览器中的 URL。但是,找不到该页面(404 错误)。这一定意味着 liveserver 仍然没有运行。我的测试在运行时没有打开 liveserver。知道为什么吗?端口没有被阻塞 - 我检查过。

【问题讨论】:

    标签: django selenium


    【解决方案1】:

    我想你忘了选择要使用的 webdriver:

    class SomethingTest(LiveServerTestCase):
        def setUp(self):
            self.browser = webdriver.Firefox()
            self.browser.implicitly_wait(2)
    
        def tearDown(self):
            self.browser.quit()
    
        def test_user_can_log_in(self):
            self.browser.get(self.live_server_url + reverse('something'))
            self.fail('write rest of the test')
    

    【讨论】:

    • 这在我上面发布的代码中并不明显,但 WebDriver() 调用是一个 Firefox 网络驱动程序。它是这样导入的from selenium.webdriver.firefox.webdriver import WebDriver
    • 如果浏览器窗口启动时没有任何 URL,可能是您插入了无效的 URL。这可能是由于 self.live_server_url 为 None 造成的。我会启动一个调试器(pip install pudb and import pudb; pudb.set_trace() 在尝试 GET 请求之前上线)。所以你会看到,如果测试方法真的被执行了,里面有什么。
    【解决方案2】:

    这可能不是你的问题,但让我感到苦恼的是LiveServerTestCasesetUpClass 启动服务器线程,这是我在没有调用super(MyProjectLiveServerTestCase, self).setUpClass() 的情况下定义的。

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 2016-07-22
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多