Skip to content

Instantly share code, notes, and snippets.

@grigory51
Created May 14, 2013 22:00
Show Gist options
  • Save grigory51/5579981 to your computer and use it in GitHub Desktop.
Save grigory51/5579981 to your computer and use it in GitHub Desktop.
# -*- 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