Эта статья была впервые опубликована на:Уокер ИИ
В настоящее время в практическом применении автоматизированного тестирования широко используется автоматизированное тестирование интерфейса, но автоматизированное тестирование пользовательского интерфейса не заменит. Давайте посмотрим, как они сравниваются:
- Тестирование автоматизации интерфейса заключается в том, чтобы пропустить внешний интерфейс и напрямую протестировать серверную часть.Он имеет более высокую эффективность выполнения и покрытие, более низкие затраты на обслуживание и в целом более высокое соотношение ввода-вывода, поэтому он более широко используется в проектах.
- Тест автоматизации пользовательского интерфейса предназначен для имитации поведения пользователя на странице внешнего интерфейса для тестирования, хотя в процессе выполнения на него легко могут повлиять другие факторы (такие как задержка компьютера, задержка браузера, скорость сети и т. д.). что приводит к сбою выполнения варианта использования, а последующие затраты на обслуживание высоки, но тест автоматизации пользовательского интерфейса ближе к реальной ситуации, когда пользователь его использует, и он также может найти некоторые ошибки, которые не могут быть обнаружены автоматизацией интерфейса. .
Поэтому при автоматизированном тестировании реальных проектов обычно применяется схема, ориентированная на автоматизацию интерфейса и охватывающая ключевые бизнес-процессы посредством автоматизации пользовательского интерфейса после стабилизации системы. Основой автоматизации пользовательского интерфейса является позиционирование элементов. Только после того, как позиционирование элемента завершено, позиционированным элементом можно управлять, а серию взаимодействий со страницей, таких как щелчок, ввод и т. д., можно смоделировать с помощью ручного тестирования.
1. Часто используемые методы позиционирования элементов
Для тестирования автоматизации пользовательского интерфейса на веб-стороне позиционирование элементов обычно использует следующие восемь методов позиционирования, предоставляемых селеном:
- id: Позиционирование по идентификатору является наиболее часто используемым методом позиционирования, поскольку идентификатор уникален, а позиционирование является точным и быстрым.
- name: находится по атрибуту [name] элемента, который может быть не уникальным.
- class_name: найти по имени атрибута класса.
- tag_name: поиск по имени тега, как правило, не рекомендуется.
- link_text: предназначен для поиска элемента гиперссылки (т. е. тега), который должен точно соответствовать содержимому гиперссылки.
- partial_link_text: также используется для поиска элементов гиперссылки, но может нечетко соответствовать содержимому гиперссылки.
- xpath: в зависимости от пути к элементу он делится на абсолютный путь и относительный путь, по которому можно найти все целевые элементы.
- css_selector: метод позиционирования элементов, официально рекомендованный Selenium, который более эффективен, чем xpath, но требует освоения некоторых основ CSS.
В реальных проектах рекомендуется использовать методы позиционирования xpath и css, которые могут найти все элементы на странице с меньшими ограничениями. Если вы мало знаете о CSS, рекомендуется использовать метод xpath, чтобы быстрее начать работу; если у вас есть определенные базовые знания CSS, рекомендуется использовать CSS для позиционирования элементов.
Затем возьмите домашнюю страницу Baidu в качестве примера, чтобы подробно представить различные методы позиционирования в реальном использовании.
2. Практическое применение позиционирования элементов
Взяв в качестве примера окно поиска на главной странице Baidu, мы вводим четыре метода позиционирования элементов: id, name, class и tag_name.
2.1 позиционирование идентификатора
Используйте атрибут id, чтобы найти поле ввода на главной странице Baidu.
# 通过input标签的id属性进行定位
find_element_by_id('su')
2.2 позиционирование имени
Используйте атрибут name, чтобы найти поле ввода на главной странице Baidu.
# 通过input标签的name属性进行定位
find_element_by_name('wd')
2.3 позиционирование class_name
Используйте атрибут класса, чтобы найти поле ввода на главной странице Baidu.
# 通过input标签的class属性进行定位
find_element_by_class_name('s_ipt')
2.4 позиционирование tag_name
Таргетинг по имени тега используется редко, потому что один и тот же тег часто повторяется на странице.
# 通过input标签名进行定位
find_element_by_tag_name('input')
Затем возьмите «Отзыв» в нижней части страницы в качестве примера, чтобы представить два метода позиционирования linkText и partialLinkText.
2.5 Позиционирование текста ссылки
Позиционирование осуществляется с помощью текстовой информации тега, которая используется только для поиска гиперссылки тега.
# 通过a标签的文本信息进行定位
find_element_by_link_text('意见反馈')
2.6 частичное позиционирование LinkText
Позиционирование осуществляется путем нечеткого сопоставления части текстовой информации тега a.
# 通过对a标签的部分文本信息模糊匹配进行定位
find_element_by_partial_link_text('反馈')
2.7 xpath-позиционирование
Метод позиционирования xpath заключается в поиске элементов по атрибутам и путям элементов страницы.Теоретически все элементы на странице могут быть выбраны и размещены. Ниже описаны несколько методов позиционирования xpath.
Во-первых, введите выражение узла пути xpath, как показано на рисунке:
(1) позиционирование абсолютного пути xpath
Окно поиска на главной странице Baidu до сих пор используется в качестве примера для ознакомления.
find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input')
В нормальных условиях мы не используем абсолютный путь xpath для позиционирования элементов по двум причинам: во-первых, абсолютный путь громоздкий и длинный, что влияет на скорость выполнения, во-вторых, задействовано много уровней и любое изменение любого уровня приведет к сбою позиционирования, и его необходимо сбросить.Модификации не способствуют последующему обслуживанию.
(2) относительный путь xpath и комбинированное позиционирование атрибута элемента
Если атрибут целевого элемента уникален, целевой элемент можно позиционировать напрямую; в противном случае необходимо найти уникальный элемент рядом с целевым элементом, а затем позиционировать его с помощью иерархической связи между ними.
Затем все еще возьмем элемент страницы домашней страницы Baidu в качестве примера, чтобы проиллюстрировать способ позиционирования xpath.
# 通过元素属性定位百度首页的搜索框
find_element_by_xpath("//input[@id='su']")
find_element_by_xpath("//input[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_element_by_xpath("//input[@autocomplete='off']")
# 通过文本信息定位(和text_link方法不同,不局限于a标签)
find_element_by_xpath("//a[text()='意见反馈']")
find_element_by_xpath("//span[text()='设置']")
# 通过父级定位子级元素,举例百度首页搜索按钮
find_element_by_xpath("//span[@class='bg s_btn_wr']/input")
# 通过子级定位父级元素,举例百度首页百度热榜的换一换
find_element_by_xpath("//span[text()='换一换']/..")
# 通过contains方法模糊匹配定位,举例百度首页搜索按钮
find_element_by_xpath("//input[contains(@class,'s_btn')]")
find_element_by_xpath("//a[contains(text(),'反馈')]")
(3) Копия браузера xpath
В дополнение к двум вышеупомянутым методам существует еще один простой метод, заключающийся в том, чтобы найти целевой элемент в инструменте разработчика F12 браузера и щелкнуть правой кнопкой мыши, чтобы скопировать его, как показано на следующем рисунке.
Однако скопированный путь xpath может быть очень подробным, поэтому рекомендуется указать путь xpath целевого элемента в соответствии с вашими потребностями.
2.8 Позиционирование css_selector
(1) Введение в позиционирование CSS
css_selector positioning (далее css positioning), метод его позиционирования, с помощью селекторов. В CSS селектор — это шаблон, используемый для выбора объектов, которые необходимо стилизовать. Позиционирование элементов с помощью CSS теоретически может найти все элементы на странице.
По сравнению с xpath синтаксис css более лаконичен, а скорость позиционирования выше, но синтаксис css сложнее, чем xpath, и его относительно сложно запомнить.
(2) Пример позиционирования CSS
Ниже все еще возьмем окно поиска на главной странице Baidu в качестве примера, чтобы проиллюстрировать метод позиционирования CSS.
# 通过id定位,id名前加#
find_element_by_css_selector("#kw")
# 通过class定位,class名前加.
find_element_by_css_selector(".s_ipt")
# 通过标签定位
find_element_by_css_selector("input")
# 通过其它属性定位
find_element_by_css_selector("[name='wd']")
# 标签和属性组合定位
find_element_by_css_selector("input#kw")
find_element_by_css_selector("input.s_ipt")
find_element_by_css_selector("input[name='wd']")
find_element_by_css_selector("[name='wd'][autocomplete='off']")
# 通过父级定位子级元素
find_element_by_css_selector("from#form>span[@class='bg s_ipt_wr']>input")
3. Резюме
Выше приведено краткое введение в различные методы позиционирования элементов селена. При фактическом использовании проекта при выборе метода позиционирования рекомендуется выбирать порядок «id > имя > xpath/css > другое».
Хотя автоматизированное тестирование пользовательского интерфейса используется не так широко, как тестирование интерфейсов, оно также является недоступной частью автоматизированного тестирования.Я надеюсь, что эта статья может быть полезна небольшим партнерам, которые изучают автоматизацию пользовательского интерфейса.
PS: Для получения дополнительной технической галантереи, пожалуйста, обратите внимание на [Публичный аккаунт | xingzhe_ai] и обсудите с ходоками!