2012-08-27 74 views
1

我一直在Django项目中工作了一段时间,并开始一个新的应用程序,试图与Selenium在同一时间进行更多的自动化测试。我使用http://www.tdd-django-tutorial.com/作为指导。Django +硒测试挂起 - 死锁?

我试图测试登录到我的应用程序的能力。我的测试可以拉起页面并且没有任何麻烦地填写文本字段,但是当它点击提交按钮时,它会挂起 - Firefox会一直尝试加载新页面,但它永远不会发生。这看起来像是僵局,但我不明白这一点足以知道发生了什么。

其他详细信息:我正在使用Django的内置登录视图。我有另一个成功登录管理网站的测试。当我手动测试时,我可以很好地登录到我的应用程序。该应用程序访问远程MySQL数据库。

这里是我的测试:

from django.test import TestCase, LiveServerTestCase 
from selenium import webdriver 
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.common.keys import Keys 

class BucloudTest(LiveServerTestCase): 
"""Tests shared functionality (login, network and app selection).""" 

    fixtures = ['24aug2012_dev_auth.json'] 

    def setUp(self): 
     self.browser = webdriver.Firefox() 
     self.browser.implicitly_wait(5) 

    def tearDown(self): 
     self.browser.quit() 

    def test_good_login(self): 
    """Tests that a user can log in using valid credentials.""" 

     self.browser.get(self.live_server_url + "/login/") 
     user_css = "[placeholder=Username]" 
     user_field = self.browser.find_element_by_css_selector(user_css) 
     user_field.send_keys("test_user1") 
     pw_css = "[placeholder=Password]" 
     pw_field = self.browser.find_element_by_css_selector(pw_css) 
     pw_field.send_keys("test") 
     button = self.browser.find_element_by_css_selector("[value='Sign in']") 
     button.click() 
     WebDriverWait(self.browser, 30).until(
      lambda driver: driver.find_element_by_tag_name('body')) 
     body = self.browser.find_element_by_tag_name("body") 
     self.assertIn("Properties", body.text) 
     print "ran tests YAY!!" 

运行测试与manage.py test functests --liveserver=localhost:8080-8090

非常感谢您的任何建议!

+0

首先尝试与TestClient的登录。 请看这里https://docs.djangoproject.com/zh/dev/topics/testing/#django.test.client.Client.login 只是为了确保这不是登录问题 – apelliciari

+0

感谢您的建议。我试过了,它工作正常(运行速度比我预期的要慢一些)。我发现我使用的服务器被另一个进程陷入困境,并且因为这个被终止了,所以测试工作间歇性地进行。当他们工作或不工作时,我找不到一种模式。我看到在本地sqlite数据库上运行的相同行为(在Windows 7上)。使用Chrome不会遇到同样的问题,但我会遇到其他不一致的错误('WindowsError:[Error 5] Access is denied')。目前我正在放弃Selenium,但欢迎任何其他建议! – atuccillo

回答

-1

这可能是由于你的test_good_login的内容()函数没有缩进

+0

感谢您的建议。这实际上只是我输入的一个错字,我刚刚纠正了。实际的代码被正确缩进。 – atuccillo

+0

如果您替换 button = self.browser.find_element_by_css_selector(“[value ='Sign in']”) button.click()with pw_field.send_keys(Keys.RETURN) – Raphael