Skip to content

Instantly share code, notes, and snippets.

@valyukov
Created September 13, 2012 18:11
Show Gist options
  • Save valyukov/3716321 to your computer and use it in GitHub Desktop.
Save valyukov/3716321 to your computer and use it in GitHub Desktop.
Простой пример тестового фрэймворка с выводом на консоль результатов в xUnit формате.
# coding=utf-8
import unittest
import junitxml
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import sys
def lazy_drivers(capabilities, rwd='http://127.0.0.1:4444/wd/hub'):
for capability in capabilities:
def lazy_driver():
return webdriver.Remote(rwd, capability)
yield lazy_driver
def require_load(func):
def load_page(page, *params, **kwargs):
if not page.is_loaded():
page.load()
assert (page.is_loaded()), "Страница не загружена"
return func(page, *params, **kwargs)
return load_page
class ResultPage(object):
def __init__(self, driver):
self._driver = driver
def is_loaded(self):
try:
self._driver.find_element_by_class_name('responses')
return True
except NoSuchElementException:
return False
def load(self):
raise Exception("Страница не может быть загруженна на прямую")
@require_load
def get_result_text(self, position):
return self._driver.find_element_by_id('serp_res_' + position).text
@require_load
def title(self):
return self._driver.title
class MainPage(object):
def __init__(self, url, driver):
self._driver = driver
self._url = url
def is_loaded(self):
try:
self._driver.find_element_by_id('q')
return True
except NoSuchElementException:
return False
def load(self):
self._driver.get(self._url)
@require_load
def search_for(self, request):
q = self._driver.find_element_by_id('q')
q.send_keys(request)
q.submit()
return ResultPage(self._driver)
class SimpleTest(unittest.TestCase):
def set_lazy_driver(self, lazy_driver):
self.lazy_driver = lazy_driver
def setUp(self):
self.driver = self.lazy_driver()
self.driver.maximize_window()
def test_result_page_load_for_lepa(self):
self.assertEquals(MainPage('http://go.mail.ru/', self.driver).search_for('leprosorium').title,
u'leprosorium - 46 тыс. результатов. Поиск@Mail.Ru',
'Неверный заголовок страницы')
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
capabilities = [webdriver.DesiredCapabilities.FIREFOX, webdriver.DesiredCapabilities.INTERNETEXPLORER]
result = junitxml.JUnitXmlResult(sys.stdout)
result.startTestRun()
for lazy_driver in lazy_drivers(capabilities):
suite = unittest.TestLoader().loadTestsFromTestCase(SimpleTest)
[test.set_driver(lazy_driver) for test in suite]
suite.run(result)
result.stopTestRun()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment