在Python中自动化Selenium测试

时间:2011-02-07 14:49:21

标签: python django selenium

我有一个Django项目,我正在尝试用Selenium编写浏览器交互测试。我的目标是从Hudson / Jenkins自动化测试。到目前为止,我能够让测试点击Django服务器,但是从服务器日志中我看到它正在点击网址/selenium-server/driver而不是正确的路径。

这是我的代码(基于Firefox的Selenium IDE插件生成的内容:

from selenium import selenium


class AccountAdminPageTests(unittest.TestCase):
    def setUp(self):
        self.selenium = selenium("localhost", 
                                 8000, 
                                 "*chrome", 
                                 "http://localhost:8000/")
        self.selenium.start()
        self.selenium.open("/")

    def test_ok(self):
        self.assertTrue(self.selenium.is_text_present('OK'))

    def tearDown(self):
        self.selenium.stop()


if __name__ == "__main__":
    unittest.main()

任何线索?

5 个答案:

答案 0 :(得分:9)

从未见过确切的错误,但我认为Selenium正在尝试连接到您的应用而不是selenium Server(.jar文件)。

selenium服务器的端口应该是selenium()

的第一个参数

那应该默认为4444端口,你可能需要用

启动它
$ java -jar selenium-server.jar

FWIW这是我如何在CI服务器上运行selenium测试......

from multiprocessing import Process
from django.test import TestCase
from selenium import selenium

class SeleniumFixtureCase(TestCase):
"""
Wrapper to multiprocess localhost server and selenium instance on one
test run.
"""

def setUp(self):
    "Make the selenium connection"
    TestCase.setUp(self)
    self.server = Process(target=serve)
    self.server.start()
    self.verificationErrors = []
    self.selenium = selenium("localhost", 4444, "*firefox",
                             "http://localhost:8000/")
    self.selenium.start()

def tearDown(self):
    "Kill processes"
    TestCase.tearDown(self)
    self.server.terminate()
    self.selenium.stop()
    self.assertEqual([], self.verificationErrors)

def _login(self):
    "Login as Albert Camus"
    self.selenium.open("http://localhost:8000/admin/")
    self.selenium.wait_for_page_to_load("30000")
    self.selenium.type("id_username", "albert")
    self.selenium.type("id_password", "albert")
    self.selenium.click("//input[@value='Log in']")
    self.selenium.wait_for_page_to_load("30000")

答案 1 :(得分:4)

一位同事和我自己使用django和selenium 2创建了一些自动化的selenium测试。它无需使用jar文件即可运行。这是显示我们的测试用例的link to the code

答案 2 :(得分:3)

我们目前使用django-jenkins从Jenkins成功运行django测试: https://github.com/kmmbvnr/django-jenkins

FWIW现在django以LiveServerTestCase的形式为Selenium提供支持: https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.LiveServerTestCase

LiveServerTestCase启动一个django服务器,允许像Selenium这样的客户端连接到它。

此外,您现在可以将PhantomJs用作无头测试的Web驱动程序。这使CI集成更容易。

答案 3 :(得分:1)

selenium()调用的第二个参数应该是Selenium服务器端口号(如David的答案中所述),而不是测试应用程序的端口号。默认端口号为4444。我会用:

替换这个电话
  self.selenium = selenium("localhost", 4444, ....

答案 4 :(得分:0)

对于自动化Selenium测试,我肯定会使用像Jenkins这样的CI解决方案。您可以将Jenkins配置为提取代码存储库并从服务器触发Selenium测试。我一直在使用Pytest从詹金斯这样做。

您可以在此处找到使用Github和Selenium配置Jenkins的分步教程:http://www.6020peaks.com/2015/12/how-to-build-a-test-automation-solution-for-your-web-projects/