Skip to content

Instantly share code, notes, and snippets.

@grigory51
Created May 14, 2013 23:23
Show Gist options
  • Save grigory51/5580534 to your computer and use it in GitHub Desktop.
Save grigory51/5580534 to your computer and use it in GitHub Desktop.
final i want to sleep
# -*- 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