Created
May 14, 2013 22:00
-
-
Save grigory51/5579981 to your computer and use it in GitHub Desktop.
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") #элементы с текстом подсказок | |
def typeSearchQuery(self, query): #ввод запроса в форму | |
self.searchField.send_keys(query) | |
def clickClearSearchFieldButton(self): #нажимаем кнопку очистки ввода | |
self.clearSearchFieldButton.click() | |
def is_clearSearchFieldButton_visible(self): | |
return self.clearSearchFieldButton.is_displayed() | |
def updateSuggestTextElements(self): #обновляем содержимое подсказок | |
self.suggestTextElements = self.driver.find_elements_by_css_selector(".go-suggests__item__text") | |
def searchFieldValue(self): #считываем значение поля поискового запроса | |
return self.searchField.get_attribute("value") | |
def suggestedTextTips(self): #массив с подсказаными словами | |
self.updateSuggestTextElements() | |
result = [] | |
for i in self.suggestTextElements: | |
result.append(i.get_attribute("innerHTML")) | |
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") #элемены ссылок пагинатора | |
return | |
def array_links_paginator(self): #получить массив самих ссылок из пагинатора | |
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() | |
return | |
def test_clearButton(self): | |
page = GoSearch_Page(self.driver) | |
#Проверяем очистку формы при нажатии | |
page.typeSearchQuery(u"Валера, настало твое время") | |
wait = ui.WebDriverWait(driver, 2) | |
wait.until(lambda d: page.is_clearSearchFieldButton_visible()) | |
page.clickClearSearchFieldButton() | |
self.assertEquals(page.searchFieldValue(), "") | |
#Проверяем появление/исчезновение кнопки стирания | |
wait.until(lambda d: not page.is_clearSearchFieldButton_visible()) | |
self.assertEquals(page.is_clearSearchFieldButton_visible(), False) | |
page.typeSearchQuery(u"Ю") | |
wait.until(lambda d: page.is_clearSearchFieldButton_visible()) | |
self.assertEquals(page.is_clearSearchFieldButton_visible(), True) | |
def test_suggests(self): | |
return | |
def set_driver(self, driver): | |
self.driver = driver | |
def tearDown(self): | |
self.driver.quit() | |
class CheckPaginator(): | |
def __init__(self, driver): | |
self.driver = driver | |
def testIt(self): | |
page = SearchResult_Page(self.driver, "путин") #запрашиваем поисковую выдачу по запросу | |
links_for_check = page.array_links_paginator() # получаем ссылки с пагинатора | |
self.check_link(links_for_check) #проверям нет ли по этим ссылкам страниц с пустой выдачей | |
return | |
def check_link(self, array): | |
for i in array: | |
self.driver.get(i); #получаем страницу по ссылке | |
time.sleep(1) | |
assert (len(self.driver.find_elements_by_css_selector('.res')) != 0) #считаем количество выданных блоков | |
return | |
class CheckSuggester(): | |
def __init__(self, driver): | |
self.driver = driver | |
def testIt(self): | |
page = GoSearch_Page(self.driver) #получаем главную | |
query = u"Владимир" #запрос который будем вводить | |
current_query = "" #то, что ввели на данный момент | |
for i in query: | |
current_query = current_query + i #кол-ве введенных символов увеличивается | |
page.typeSearchQuery(i) # вводим по буковкам | |
time.sleep(1) | |
self.checkRelevant(current_query, page) #проверяем релеватность подсказок | |
return | |
def checkRelevant(self, query, page): | |
tips = page.suggestedTextTips() #вытаскиваем полученные подсказки | |
count_all = len(tips) #количество полученных подсказок | |
count_good = 0 #количество подсказок в попад | |
for i in tips: #для каждой подсказки | |
if string.find(i, query.lower()) != -1: #если введеная часть запроса подстрока к подсказке, то | |
count_good = count_good + 1 #подсказка считается хорошей | |
assert ((count_all - count_good) < 2) #все подсказки за исключением может быть одной должны быть хорошие. | |
return | |
drivers = [webdriver.Firefox()] | |
result = junitxml.JUnitXmlResult(sys.stdout) | |
result.startTestRun() | |
for driver in drivers: | |
suite = TestLoader().loadTestsFromTestCase(Test_GoSearch_Page) | |
[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