Created
May 14, 2013 23:23
-
-
Save grigory51/5580534 to your computer and use it in GitHub Desktop.
final
i want to sleep
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from selenium import webdriver | |
from unittest import TestCase, TestLoader | |
import selenium.webdriver.support.ui as ui | |
import time | |
import string | |
import junitxml | |
import sys | |
class GoSearch_Page(): #главная страница поиска | |
def __init__(self, driver): | |
self.driver = driver #получаем драйвер | |
self.driver.get("http://go.mail.ru"); #скачиваем страницу | |
self.setup() #собираем необходимые элементы | |
def setup(self): | |
self.searchField = self.driver.find_element_by_name("q") #поле поисковых запросов | |
self.clearSearchFieldButton = self.driver.find_element_by_id("go-form__qclear") #кнопка очиски формы запроса | |
self.suggestTextElements = self.driver.find_elements_by_css_selector(".go-suggests__item__text") #элементы с текстом подсказок | |
self.suggest_window = self.driver.find_element_by_css_selector(".go-suggests") | |
self.photo_toggle = self.driver.find_element_by_css_selector("#wallpapers__toggle") | |
def update(self): | |
self.setup() | |
def typeSearchQuery(self, query): #ввод запроса в форму | |
self.update() | |
self.searchField.send_keys(query) | |
def clickClearSearchFieldButton(self): #нажимаем кнопку очистки ввода | |
self.update() | |
self.clearSearchFieldButton.click() | |
def clickPhotoToggle(self): #нажимаем кнопку вкл/выкл фотографии | |
self.update() | |
self.photo_toggle.click() | |
def photoToggleText(self): | |
self.update() | |
return self.photo_toggle.text | |
def is_clearSearchFieldButton_visible(self): | |
self.update() | |
return self.clearSearchFieldButton.is_displayed() | |
def is_suggestWindow_visible(self): | |
self.update() | |
return self.suggest_window.is_displayed() | |
def searchFieldValue(self): #считываем значение поля поискового запроса | |
self.update() | |
return self.searchField.get_attribute("value") | |
def suggestedTextTips(self): #массив с подсказаными словами | |
self.update() | |
result = [] | |
for i in self.suggestTextElements: | |
result.append(i.text) | |
return result | |
class SearchResult_Page(): #Страница с поисковой выдачей | |
def __init__(self, driver, query): | |
self.driver = driver #получаем драйвер | |
self.driver.get("http://go.mail.ru/search?q=" + str(query)); #скачиваем страницу с оперделныным запросом | |
self.setup() #собираем необходимые элементы | |
def setup(self): | |
self.paginator_links = self.driver.find_elements_by_css_selector(".pagenav-exp a") #элемены ссылок пагинатора | |
def update(self): | |
self.setup() | |
def array_links_paginator(self): #получить массив самих ссылок из пагинатора | |
self.update() | |
result = [] | |
for i in self.paginator_links: | |
result.append(i.get_attribute("href")) | |
return result | |
class Test_GoSearch_Page(TestCase): | |
def setUp(self): | |
self.driver = webdriver.Firefox() | |
self.page = GoSearch_Page(self.driver) | |
return | |
def test_clearButton(self): | |
#Проверяем очистку формы при нажатии | |
self.page.typeSearchQuery(u"Валера, настало твое время") | |
wait = ui.WebDriverWait(driver, 2) | |
wait.until(lambda d: self.page.is_clearSearchFieldButton_visible()) | |
self.page.clickClearSearchFieldButton() | |
self.assertEquals(self.page.searchFieldValue(), "") | |
#Проверяем появление/исчезновение кнопки стирания | |
wait.until(lambda d: not self.page.is_clearSearchFieldButton_visible()) | |
self.assertEquals(self.page.is_clearSearchFieldButton_visible(), False) | |
self.page.typeSearchQuery(u"Ю") | |
wait.until(lambda d: self.page.is_clearSearchFieldButton_visible()) | |
self.assertEquals(self.page.is_clearSearchFieldButton_visible(), True) | |
def test_suggests(self): | |
#Тестируем качество подсказок | |
query = u"Владимир" #запрос который будем вводить | |
current_query = "" #то, что ввели на данный момент | |
for i in query: | |
current_query = current_query + i #кол-ве введенных символов увеличивается | |
self.page.typeSearchQuery(i) # вводим по буковкам | |
time.sleep(1) | |
tips = self.page.suggestedTextTips() #вытаскиваем полученные подсказки | |
count_all = len(tips) #количество полученных подсказок | |
count_good = 0 #количество подсказок в попад | |
for j in tips: #для каждой подсказки | |
if string.find(j.lower(), current_query.lower()) != -1: #если введеная часть запроса подстрока к подсказке, то | |
count_good = count_good + 1 #подсказка считается хорошей | |
self.assertTrue((count_all - count_good) < 2) #все подсказки за исключением может быть одной должны быть хорошие. | |
#Тестируем показываются подсказки или нет | |
self.page.clickClearSearchFieldButton() | |
wait = ui.WebDriverWait(driver, 2) | |
wait.until(lambda f: not self.page.is_suggestWindow_visible()) | |
self.assertFalse(self.page.is_suggestWindow_visible()) | |
self.page.typeSearchQuery("q") | |
wait.until(lambda f: self.page.is_suggestWindow_visible()) | |
self.assertTrue(self.page.is_suggestWindow_visible()) | |
def test_photo_toggle(self): | |
to_positive = u"Показать фото" | |
to_negative = u"Убрать фото" | |
for i in range(5): | |
start_value = self.page.photoToggleText() | |
self.page.clickPhotoToggle() | |
time.sleep(1) #не знаю как дождаться callback от js, который вкл/выкл фото и меняет текст | |
if start_value == to_positive: | |
self.assertEqual(self.page.photoToggleText(), to_negative) | |
else: | |
self.assertEqual(self.page.photoToggleText(), to_positive) | |
time.sleep(1) | |
def set_driver(self, driver): | |
self.driver = driver | |
def tearDown(self): | |
self.driver.quit() | |
class Test_ResultSearch_Page(TestCase): | |
def setUp(self): | |
self.driver = webdriver.Firefox() | |
self.page = SearchResult_Page(self.driver, "путин") | |
def test_paginator(self): | |
links_for_check = self.page.array_links_paginator() # получаем ссылки с пагинатора | |
#проверям нет ли по этим ссылкам страниц с пустой выдачей | |
for i in links_for_check: | |
self.driver.get(i); #получаем страницу по ссылке | |
time.sleep(1) | |
self.assertTrue(len(self.driver.find_elements_by_css_selector('.res')) != 0) #считаем количество выданных блоков | |
return | |
def set_driver(self, driver): | |
self.driver = driver | |
def tearDown(self): | |
self.driver.quit() | |
drivers = [webdriver.Firefox()] | |
test_cases = [Test_GoSearch_Page, Test_ResultSearch_Page] | |
result = junitxml.JUnitXmlResult(sys.stdout) | |
result.startTestRun() | |
for driver in drivers: | |
for test_case in test_cases: | |
suite = TestLoader().loadTestsFromTestCase(test_case) | |
[test.set_driver(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