Содержание
- 2. Обзор команд Selenium WebDriver Занятие 2
- 3. План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами,
- 4. План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами,
- 5. Общий обзор команд http://selenium.googlecode.com/git/docs/api/py/index.html браузер – запуск, остановка окно браузера – открыть, закрыть, переключиться, размер диалоговые
- 6. План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами,
- 7. Запуск браузера from selenium import webdriver driver = webdriver.Firefox() driver = webdriver.Chrome() driver = webdriver.Ie() driver
- 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,
- 14. Типы локаторов By.ID By.NAME By.CSS_SELECTOR By.XPATH By.TAG_NAME By.CLASS By.LINK_TEXT By.PARTIAL_LINK_TEXT
- 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) найти первый элемент по заданному условию, находящийся внутри элемента
- 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
- 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
- 23. Явное ожидание from selenium.webdriver.support.wait import WebDriverWait wait = WebDriverWait(driver, 30) element = wait.until( lambda x: x.find_element(by,
- 24. Явное ожидание from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.expected_conditions import * wait = WebDriverWait(driver, 30) element =
- 25. Явные и неявные ожидания Явные На стороне клиента Ждать можно чего угодно Надо писать явно TimeoutException
- 26. План занятия Общий обзор команд Запуск и остановка, открытие страниц Поиск элементов (+ожидания) Действия с элементами,
- 27. «Простые» действия кликнуть ссылки и кнопки радио и чекбоксы списки ввести текст прицепить файл
- 28. «Сложные» действия клавиатурные сочетания наведение мыши перетаскивание правая кнопка мыши двойной клик
- 29. Две главные операции click любой видимый элемент клик в центр элемента срабатывают все события send_keys любой
- 30. А другие операции? select ? это просто клик по элементу списка toggle ? это просто клик
- 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. Нативные и синтезированные события Нативные На уровне ОС Реализация на C/C++ Точнее эмулируют Иногда требуют фокус
- 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 webdriver.ActionChains(driver) .move_to_element(drag) .key_down(Keys.CONTROL) .click_and_hold() .move_to_element(drop) .release() .key_up(Keys.CONTROL) .perform()
- 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() webdriver.ActionChains(driver) .move_to_element(menu) .move_to_element(submenu) .move_to_element(item)
- 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, …
- 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() а если нет алёрта?
- 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() # запоминаем идентификаторы уже открытых
- 52. Ожидание появления нового окна class any_window_other_than(object): def __init__(self, existing_windows): self.existing_windows = existing_windows def __call__(self, driver): handles
- 53. Размеры и положение окна driver.get_window_size() driver.set_window_size(800, 600) driver.maximize_window() driver.get_window_position() driver.set_window_position(0, 0)
- 55. Скачать презентацию