Автоматизация тестов Selenium в Python - PullRequest
5 голосов
/ 07 февраля 2011

У меня есть проект Django, для которого я пытаюсь написать тесты взаимодействия браузера с Selenium.Моя цель - автоматизировать тесты от Hudson / Jenkins.Пока что я могу получить тест, работающий на сервере Django, но из журналов сервера я вижу, что он выбрал URL /selenium-server/driver вместо правильного пути.

Вот мой код (на основе того, что было сгенерировано).с помощью плагина Selenium IDE для Firefox:

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 ]

9 голосов
/ 07 февраля 2011

Никогда не видел точной ошибки, но я думаю, что Selenium пытается подключиться к вашему приложению, а не к серверу selenium (файл .jar).

Порт сервера селена должен быть первым аргументомselenium ()

Это значение по умолчанию для порта 4444, вам, вероятно, придется запустить его с

$ java -jar selenium-server.jar

FWIW, вот как я запускаю тесты селена на сервере CI ...

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")
4 голосов
/ 10 августа 2011

коллега и я создали несколько автоматических тестов на селен, используя django и selenium 2. Это работает без использования файлов jar. Вот ссылка на код , которая показывает наши тесты.

3 голосов
/ 26 июня 2013

В настоящее время мы успешно запускаем тесты django от Jenkins с использованием django-jenkins: https://github.com/kmmbvnr/django-jenkins

FWIW в настоящее время django предоставляет поддержку Selenium в форме LiveServerTestCase: https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.LiveServerTestCase

LiveServerTestCase запускает сервер django, который позволяет таким клиентам, как Selenium, подключаться к нему.

Кроме того, теперь вы можете использовать PhantomJs в качестве веб-драйвера для автономного тестирования. Это облегчает интеграцию CI.

1 голос
/ 07 февраля 2011

Второй аргумент вызова selenium() должен быть номером порта сервера Selenium (как написано в ответе Дэвида), а не номером порта протестированного приложения. Номер порта по умолчанию 4444. Я бы заменил звонок на:

  self.selenium = selenium("localhost", 4444, ....
0 голосов
/ 02 января 2016

Для автоматизации тестов Selenium я бы определенно использовал решение CI, такое как Jenkins.Вы можете настроить Jenkins для извлечения вашего хранилища кода и запуска тестов Selenium с вашего сервера.Я использовал Pytest для этого из Jenkins.

Вы можете найти пошаговое руководство по настройке Jenkins с Github и Selenium здесь: http://www.6020peaks.com/2015/12/how-to-build-a-test-automation-solution-for-your-web-projects/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...