Selenium 2.0 + Python презентация

Содержание


Selenium 2.0 + Python
 © 2013 Алексей БаранцевОбзор команд Selenium WebDriver
 Занятие 2План занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 ПоискПлан занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 ПоискОбщий обзор команд
 http://selenium.googlecode.com/git/docs/api/py/index.html
 браузер – запуск, остановка
 окно браузера –План занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 ПоискЗапуск браузера
 from selenium import webdriver
 driver = webdriver.Firefox()
 driver =Запуск браузера
 Google Chrome
 	https://code.google.com/p/chromedriver/downloads/list
 Internet Explorer
 	https://code.google.com/p/selenium/downloads/list
 PhantomJS
 	https://code.google.com/p/phantomjs/downloads/listЗапуск браузера
 from selenium import webdriver
 driver = webdriver.Firefox( capabilities={'native_events': False})
Остановка браузера
 driver.quit() закрыть все окна и завершить работу
 driver.close() закрытьОткрытие страниц и навигация
 driver.get("http://selenium2.ru/") открыть страницу и подождать, пока онаПлан занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 ПоискБазовые команды поиска
 element = driver.find_element(by, locator) найти первый элемент поТипы локаторов
 By.ID
 By.NAME
 By.CSS_SELECTOR
 By.XPATHТипизированные команды поиска
 driver.find_element_by_id('myid')
 driver.find_element_by_name('myname')
 driver.find_element_by_xpath('//a')
 driver.find_element_by_css_selector('a')
 driver.find_element_by_tag_name('a')Поиск внутри элемента
 element2 = element1.find_element(by, locator) найти первый элемент поПример
 cell41 =
 	driver.find_element_by_css_selector("table.t1")
 	.find_elements_by_tag_name("tr")[3]
 	.find_elements_by_tag_name("td")[0]
 	это первая ячейка в четвёртойЕсли ничего не нашлось…
 find_element выбрасывает исключение NoSuchElementException
 find_elements возвращает пустойКак проверить наличие?
 def is_element_present(self, by, locator) {
   try:
Как проверить наличие?
 def is_element_present(self, by, locator) {
   returnНеявное ожидание
 driver.implicitly_wait(10)
 find_element ждёт, пока элемент появится
 find_elements ждёт, покаЯвное ожидание
 for i in range(60):
   try:
  Явное ожидание
 from selenium.webdriver.support.wait import WebDriverWait
 wait = WebDriverWait(driver, 30)
 elementЯвное ожидание
 from selenium.webdriver.support.wait import WebDriverWait
 from selenium.webdriver.support.expected_conditions import *
 waitЯвные и неявные ожидания
 ЯвныеПлан занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 Поиск«Простые» действия
 кликнуть
 ссылки и кнопки
 радио и чекбоксы
 списки
 ввести«Сложные» действия
 клавиатурные сочетания
 наведение мыши
 перетаскивание
 правая кнопка мыши
 двойнойДве главные операции
 clickА другие операции?
 select ? это просто клик по элементу списка
Тем не менее, Select
 from selenium.webdriver.support.select import Select
 dropdown = Select(element)
Пример
 from selenium.webdriver.common.keys import Keys
 element.click()
 element.send_keys(Keys.HOME)
 element.send_keys("some text")
 добавить текстПример
 element.send_keys(Keys.CONTROL, "a")
 time.sleep(1)
 element.send_keys(Keys.DELETE)
 удалить содержимое поля вводаПример
 element.send_keys("text to search")
 element.send_keys(Keys.RETURN)
 засабмитить форму, если нет кнопкиПример
 body = driver.find_element_by_tag_name("body")
 body.send_keys( Keys.CONTROL, Keys.SHIFT, "1")
 «горячие клавиши», клавиатурныеПример
 set_clipboard_contents(longtext)
 textarea.send_keys(Keys.CONTROL , "v")
 вставить длинный текст из буфера обменаНативные и синтезированные события
 НативныеЗапуск браузера
 from selenium import webdriver
 driver = webdriver.Firefox( capabilities={'native_events': True})
Actions
 click
 send_keys
 move_to_element
 click_and_hold
 release
 key_down
 key_upActions
 webdriver.ActionChains(driver) .move_to_element(el, 1, 1) .click() .perform()
 webdriver.ActionChains(driver)  .move_to_element(el) .move_by_offset(5,5)План занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 Поискtext
 Видимый текст невидимые элементы имеют пустой текст
 Нормализация – удалениеget_attribute
 input.get_attribute("value");
 input.get_attribute("href"); всегда абсолютные ссылки
 button.get_attribute("disabled")  либо null, либоis_displayed
 вроде бы всё очевидно, но…
 находится за левым или верхнимЧто ещё?
 element.value_of_css_property("color")
 element.size()
 element.location()
 element.get_tag_name()
 element.is_enabled()
 element.is_selected()План занятия
 Общий обзор команд
 Запуск и остановка, открытие страниц
 Поискdriver.switch_to_...
 driver.switch_to_alert()
 driver.switch_to_frame()
 driver.switch_to_default_content()
 driver.switch_to_window()Диалоговые окна
 alert = driver.switch_to_alert()
 alert_text = alert.text()
 alert.accept()  #Фреймы
 driver.switch_to_frame( driver.find_element_by_tag_name("iframe"))
 # что-то сделали внутри фрейма
 driver.switch_to_default_content()
 фреймы могутОкна
 all_windows = driver.window_handles()
 this_window = driver.current_window_handle()
 driver.switch_to_window(handle)
 # что-то делаемТуда и обратно
 # запоминаем идентификатор текущего окна
 original_window = driver.current_window_handle()
Ожидание появления нового окна
 class any_window_other_than(object):
   def __init__(self, existing_windows):
Размеры и положение окна
 driver.get_window_size()
 driver.set_window_size(800, 600)
 driver.maximize_window()
 driver.get_window_position()
 driver.set_window_position(0, 0)На этом пока всё
 На этом пока всё
 «Домашка»
 Форум
 Скайп-чат



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Selenium 2.0 + Python © 2013 Алексей Баранцев


Слайд 2
Описание слайда:
Обзор команд Selenium WebDriver Занятие 2

Слайд 3
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами, простые и сложные Получение свойств элементов Переключение между окнами и фреймами

Слайд 4
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами, простые и сложные Получение свойств элементов Переключение между окнами и фреймами

Слайд 5
Описание слайда:
Общий обзор команд http://selenium.googlecode.com/git/docs/api/py/index.html браузер – запуск, остановка окно браузера – открыть, закрыть, переключиться, размер диалоговые окна, меню, тулбар, статусбар, плагины страница – открыть, предыдущая, следующая, выполнить JS-код элементы – найти, мышь, клавиатура, текст, атрибуты, стили, размер фреймы – найти, переключиться

Слайд 6
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами, простые и сложные Получение свойств элементов Переключение между окнами и фреймами

Слайд 7
Описание слайда:
Запуск браузера from selenium import webdriver driver = webdriver.Firefox() driver = webdriver.Chrome() driver = webdriver.Ie() driver = webdriver.Opera() driver = webdriver.PhantomJS() driver = webdriver.Remote()

Слайд 8
Описание слайда:
Запуск браузера Google Chrome https://code.google.com/p/chromedriver/downloads/list Internet Explorer https://code.google.com/p/selenium/downloads/list PhantomJS https://code.google.com/p/phantomjs/downloads/list

Слайд 9
Описание слайда:
Запуск браузера from selenium import webdriver driver = webdriver.Firefox( capabilities={'native_events': False}) https://code.google.com/p/selenium/wiki/DesiredCapabilities

Слайд 10
Описание слайда:
Остановка браузера driver.quit() закрыть все окна и завершить работу driver.close() закрыть текущее окно, если оно последнее – завершить работу

Слайд 11
Описание слайда:
Открытие страниц и навигация driver.get("http://selenium2.ru/") открыть страницу и подождать, пока она загрузится driver.back() driver.refresh() driver.forward()

Слайд 12
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов и ожидания Действия с элементами, простые и сложные Получение свойств элементов Переключение между окнами и фреймами

Слайд 13
Описание слайда:
Базовые команды поиска element = driver.find_element(by, locator) найти первый элемент по заданному условию elements = driver.findElements(by, locator) найти все элементы по заданному условию

Слайд 14
Описание слайда:
Типы локаторов By.ID By.NAME By.CSS_SELECTOR By.XPATH

Слайд 15
Описание слайда:
Типизированные команды поиска driver.find_element_by_id('myid') driver.find_element_by_name('myname') driver.find_element_by_xpath('//a') driver.find_element_by_css_selector('a') driver.find_element_by_tag_name('a')

Слайд 16
Описание слайда:
Поиск внутри элемента element2 = element1.find_element(by, locator) найти первый элемент по заданному условию, находящийся внутри элемента element1 elements = element1.find_elements(by, locator) найти все элементы по заданному условию, находящиеся внутри элемента element1

Слайд 17
Описание слайда:
Пример cell41 = driver.find_element_by_css_selector("table.t1") .find_elements_by_tag_name("tr")[3] .find_elements_by_tag_name("td")[0] это первая ячейка в четвёртой строке таблицы, имеющий класс t1

Слайд 18
Описание слайда:
Если ничего не нашлось… find_element выбрасывает исключение NoSuchElementException find_elements возвращает пустой список

Слайд 19
Описание слайда:
Как проверить наличие? def is_element_present(self, by, locator) { try: self.driver.find_element(by, locator) except NoSuchElementException, e: return False return True

Слайд 20
Описание слайда:
Как проверить наличие? def is_element_present(self, by, locator) { return len( self.driver.find_elements(by, locator)) > 0 то же самое, даже по скорости одинаково!

Слайд 21
Описание слайда:
Неявное ожидание driver.implicitly_wait(10) find_element ждёт, пока элемент появится find_elements ждёт, пока хотя бы один элемент появится

Слайд 22
Описание слайда:
Явное ожидание for i in range(60): try: if self.is_element_present(by, locator): break except: pass time.sleep(1) else: self.fail("time out")

Слайд 23
Описание слайда:
Явное ожидание from selenium.webdriver.support.wait import WebDriverWait wait = WebDriverWait(driver, 30) element = wait.until( lambda x: x.find_element(by, locator))

Слайд 24
Описание слайда:
Явное ожидание from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.expected_conditions import * wait = WebDriverWait(driver, 30) element = wait.until( presence_of_element_located((by, locator)) http://selenium.googlecode.com/git/docs/api/py/_modules/selenium/webdriver/support/expected_conditions.html

Слайд 25
Описание слайда:
Явные и неявные ожидания Явные

Слайд 26
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами, простые и сложные Получение свойств элементов Окнами и фреймами

Слайд 27
Описание слайда:
«Простые» действия кликнуть ссылки и кнопки радио и чекбоксы списки ввести текст прицепить файл

Слайд 28
Описание слайда:
«Сложные» действия клавиатурные сочетания наведение мыши перетаскивание правая кнопка мыши двойной клик

Слайд 29
Описание слайда:
Две главные операции click

Слайд 30
Описание слайда:
А другие операции? select ? это просто клик по элементу списка toggle ? это просто клик по чекбоксу check / uncheck ? клик с предварительной проверкой

Слайд 31
Описание слайда:
Тем не менее, Select from selenium.webdriver.support.select import Select dropdown = Select(element) dropdown.select_by_index(1) dropdown.select_by_value("mon") dropdown.select_by_visible_text("Monday")

Слайд 32
Описание слайда:
Пример from selenium.webdriver.common.keys import Keys element.click() element.send_keys(Keys.HOME) element.send_keys("some text") добавить текст в начало, а не в конец

Слайд 33
Описание слайда:
Пример element.send_keys(Keys.CONTROL, "a") time.sleep(1) element.send_keys(Keys.DELETE) удалить содержимое поля ввода

Слайд 34
Описание слайда:
Пример element.send_keys("text to search") element.send_keys(Keys.RETURN) засабмитить форму, если нет кнопки

Слайд 35
Описание слайда:
Пример body = driver.find_element_by_tag_name("body") body.send_keys( Keys.CONTROL, Keys.SHIFT, "1") «горячие клавиши», клавиатурные сочетания

Слайд 36
Описание слайда:
Пример set_clipboard_contents(longtext) textarea.send_keys(Keys.CONTROL , "v") вставить длинный текст из буфера обмена

Слайд 37
Описание слайда:
Нативные и синтезированные события Нативные

Слайд 38
Описание слайда:
Запуск браузера from selenium import webdriver driver = webdriver.Firefox( capabilities={'native_events': True}) https://code.google.com/p/selenium/wiki/DesiredCapabilities

Слайд 39
Описание слайда:
Actions click send_keys move_to_element click_and_hold release key_down key_up

Слайд 40
Описание слайда:
Actions webdriver.ActionChains(driver) .move_to_element(el, 1, 1) .click() .perform() webdriver.ActionChains(driver) .move_to_element(el) .move_by_offset(5,5) .click() .perform()

Слайд 41
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами, простые и сложные Получение свойств элементов Переключение между окнами и фреймами

Слайд 42
Описание слайда:
text Видимый текст невидимые элементы имеют пустой текст Нормализация – удаление пробелов Preformatted – сохранение пробелов

Слайд 43
Описание слайда:
get_attribute input.get_attribute("value"); input.get_attribute("href"); всегда абсолютные ссылки button.get_attribute("disabled") либо null, либо true disabled, selected, checked, readonly, … div.get_attribute("innerText"); attribute или property?

Слайд 44
Описание слайда:
is_displayed вроде бы всё очевидно, но… находится за левым или верхним краем частично находится за краем скрыт под другим элементом частично скрыт под другим элементом прозрачный, либо цвет сливается с фоном

Слайд 45
Описание слайда:
Что ещё? element.value_of_css_property("color") element.size() element.location() element.get_tag_name() element.is_enabled() element.is_selected()

Слайд 46
Описание слайда:
План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами, простые и сложные Получение свойств элементов Переключение между окнами и фреймами

Слайд 47
Описание слайда:
driver.switch_to_... driver.switch_to_alert() driver.switch_to_frame() driver.switch_to_default_content() driver.switch_to_window()

Слайд 48
Описание слайда:
Диалоговые окна alert = driver.switch_to_alert() alert_text = alert.text() alert.accept() # либо alert.dismiss() а если нет алёрта? NoAlertPresentException а если не сделать? UnhandledAlertException

Слайд 49
Описание слайда:
Фреймы driver.switch_to_frame( driver.find_element_by_tag_name("iframe")) # что-то сделали внутри фрейма driver.switch_to_default_content() фреймы могут быть вложены как матрёшка

Слайд 50
Описание слайда:
Окна all_windows = driver.window_handles() this_window = driver.current_window_handle() driver.switch_to_window(handle) # что-то делаем в этом окне driver.close() driver.switch_to_window(original_window)

Слайд 51
Описание слайда:
Туда и обратно # запоминаем идентификатор текущего окна original_window = driver.current_window_handle() # запоминаем идентификаторы уже открытых окон existing_windows = driver.window_handles() # кликаем кнопку, которая открывает новое окно driver.find_element_by_id("button").click() # ждем появления нового окна, с новым идентификатором new_window = wait.until(any_window_other_than(existing_windows)) # переключаемся в новое окно driver.switch_to_window(new_window) # закрываем его driver.close() # и возвращаемся в исходное окно driver.switch_to_window(original_window)

Слайд 52
Описание слайда:
Ожидание появления нового окна class any_window_other_than(object): def __init__(self, existing_windows): self.existing_windows = existing_windows def __call__(self, driver): handles = driver.window_handles() diff = set(handles)-set(existing_windows) return iter(diff).next() if len(diff) > 0 else False

Слайд 53
Описание слайда:
Размеры и положение окна driver.get_window_size() driver.set_window_size(800, 600) driver.maximize_window() driver.get_window_position() driver.set_window_position(0, 0)

Слайд 54
Описание слайда:
На этом пока всё На этом пока всё «Домашка» Форум Скайп-чат


Скачать презентацию на тему Selenium 2.0 + Python можно ниже:

Похожие презентации