Ссылки являются фундаментальными элементами веб-страниц. По сути, это гиперссылки, которые делают возможным существование всемирной интернет сети. Ниже приведен пример ссылки, а также источник HTML.
1 2 3 4 |
<a href="index.html" id="recommend_selenium_link" class="nav" data-id="123" style="font-size: 14px;"> Recommend Selenium </a> |
Запуск браузера
Тестирование веб-сайтов начинается с браузера.
1 2 3 4 |
from selenium import webdriver driver = webdriver.Firefox() driver.get("http://testwisely.com/demo") |
Используйте webdriver.Chrome или webdriver.Ie для тестирования в Chrome и IE соответственно. Для новичков рекомендуется закрыть окно браузера в конце тестового примера.
1 |
driver.quit() |
Найти ссылку по тексту
Поиск по тексту — это, пожалуй, самый прямой способ найти ссылку в Selenium, поскольку это то, что мы видим на странице.
1 |
driver.find_element_by_link_text("Recommend Selenium").click() |
Найти ссылку по ID
1 |
driver.find_element_by_id("recommend_selenium_link").click() |
Кроме того, если вы тестируете веб-сайт с несколькими языками, использование идентификаторов является, пожалуй, единственно возможным вариантом. Если вы не хотите писать тестовые скрипты, как показано ниже:
1 2 3 4 5 6 7 |
if is_italian: driver.find_element_by_link_text("Accedi").click() if is_chinese: driver.find_element_by_link_text("注册").click() else: driver.find_element_by_link_text("Sign in").click() |
Найти ссылку по частичному тексту
HTML содержимое:
1 |
<a href="/page">Get partial page</a> |
Поиск ссылки:
1 |
driver.find_element_by_partial_link_text("partial").click() |
Найти ссылку при помощи XPath
Пример ниже — поиск ссылки с текстом «Recommend Selenium» под тегом абзаца <p>.
1 |
driver.find_element_by_xpath("//p/a[text()='Recommend Selenium']").click() |
Можно сказать, что приведенный выше пример (найти по тексту ссылки) проще и интуитивно понятнее. Но давайте рассмотрим другой пример:
1 2 3 4 5 6 7 8 9 |
<div> First div <a href="link-url.html">Click here</a> </div> <div> Second div <a href="link-partial.html">Click here</a> </div> |
На этой странице есть две ссылки «Click here». Если в тестовом случае вам нужно щелкнуть вторую ссылку «Click here», простой find_element_by_link_text ("Click here") не будет работать (так как он нажимает первый). Вот способ выполнения XPath:
1 2 |
xpath = '//div[contains(text(), "Second")]/a[text()="Click here"]' driver.find_element_by_xpath(xpath).click() |
Клик на N-ую ссылку с похожим текстом
Это не редкость, что существует более одной ссылки с точно таким же текстом. По умолчанию Selenium выберет первый. Что, если вы выберете второй или N-ый? На приведенной ниже веб-странице есть три ссылки «Show Answer».
Чтобы выбрать вторую ссылку:
1 |
driver.find_elements_by_link_text("Show Answer")[1].click() |
find_elements_xxx возвращает список (также называемый массивом) веб-элементов, соответствующих критериям в порядке появления. Selenium (Python) использует индексирование на основе нуля, то есть первое из них равно 0.
Клик на N-ую ссылку по CSS критериям
Вы также можете использовать CSS выражения для поиска веб-элемента.
1 |
driver.find_element_by_css_selector("p > a:nth-child(3)").click() |
Однако, использование стилей более склонно к изменениям.
Получение атрибутов данных ссылок
Как только веб-элемент идентифицирован, мы можем получить его атрибуты. Это обычно применимо к большинству элементов HTML.
1 2 3 |
<a href="recomand.html" id="recommend_selenium_link"> Recommend Selenium </a> |
1 2 3 4 5 6 7 8 9 10 11 |
href = driver.find_element_by_link_text("Recommend Selenium").get_attribute("href") print(href) # Вывод: recomand.html id = driver.find_element_by_link_text("Recommend Selenium").get_attribute("id") print(id) # Вывод: recommend_selenium_link text = driver.find_element_by_id("recommend_selenium_link").text print(text) # Вывод: Recommend Selenium tag_name = driver.find_element_by_id("recommend_selenium_link").tag_name print(tag_name) # Вывод: a |
Тестовые ссылки открывают новое окно браузера
При нажатии на ссылку ниже откроется связанный URL-адрес в новом окне или вкладке браузера.
1 2 3 |
<a href="http://testwisely.com/demo" target="_blank"> Open new window </a> |
Чтобы найти новое окно браузера, будет проще выполнить все тесты в одном окне браузера. Вот как это сделать:
1 2 3 4 5 6 7 8 |
current_url = driver.current_url new_window_url = driver.find_element_by_link_text("Open new window").get_attribute("href") driver.get(new_window_url) # ... тестируем на новом сайте driver.find_element_by_name("name").send_keys("sometext") driver.get(current_url) # Назад |
В этом тестовом скрипте мы используем локальную переменную (термин программирования) ‘current_url‘ для хранения текущего URL-адреса.