У всех в работе бывают косяки. Я не исключение, поэтому однажды, при написании довольно сложной формы
допустил очень неочевидную ошибку, в результате чего, прежде чем я успел этому помешать, несколько сотен
раз пользователи сохранили неверные данные.
Когда форма была исправлена, встал вопрос: что делать?
Вопрос "Кто виноват", понятное дело, не стоял. Исправление можно было произвести двумя путями: один - это
писать скрипт, учитывающий все условия формы и прогонять сохранённые данные через него. Можно, но времени
разбираться на этот момент не было (форма всё-таки и правда не тривиальная была). Второй способ - это
заставить пользователей снова открывать форму для редактирования и пересохранить данные, т.е. просто открыть
страницу с определённым URL и нажать кнопку "Сохранить". Конечно, они в этом не виноваты, и страдать не должны.
Делать это мне? Ещё дольше, чем скрипт писать!
А почему бы не поручить это кому-нибудь, у кого много свободного времени, кто не будет возражать и способен
делать рутинную работу без всякого ропота? Среди людей таких нет. Тогда обратимся к роботам.
Ну и тут, как вы догадались, Selenium спешит на помощь. Буквально несколько минут, и готов тестовый скрипт,
который займётся всей работой. Запускаем
Selenium server ...
java -jar selenium-server-standalone-2.33.0.jar
... и наш скрипт ...
python test.py
... и наблюдаем, как человек-невидимка открывает браузер, переходит по ссылкам и нажимает кнопки.
Что нам и нужно было.
А вот, собственно, скрипт.
#!/usr/bin/env python
#coding:utf8
from selenium import webdriver
import unittest
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class Wd(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Remote(
command_executor='http://0.0.0.0:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX)
self.driver.implicitly_wait(30)
self.base_url = "http://my.address.ru"
def test_saveButtonClick(self):
driver = self.driver
for id in [222706,426061,441101]:
url = "%s/edit_page_%d" % (self.base_url,id)
driver.get(url)
driver.find_element_by_id("saveform").click()
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()