Skip to content

Instantly share code, notes, and snippets.

@valyukov
Created September 13, 2012 19:07
Show Gist options
  • Save valyukov/3716814 to your computer and use it in GitHub Desktop.
Save valyukov/3716814 to your computer and use it in GitHub Desktop.
пример работы selenium с листенерами
# coding=utf-8
import unittest
import junitxml
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.abstract_event_listener import AbstractEventListener
from selenium.webdriver.support.event_firing_webdriver import EventFiringWebDriver
import sys
class TestListener(AbstractEventListener):
def after_navigate_to(self, url, driver):
print url
def event_firing(lazy_driver):
def wrapped(*args, **kwargs):
return EventFiringWebDriver(lazy_driver(), TestListener())
return wrapped
def lazy_drivers(capabilities, rwd='http://127.0.0.1:4444/wd/hub'):
for capability in capabilities:
@event_firing
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
@property
@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 setUp(self):
self.driver = webdriver.Firefox()
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.CHROME]
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