0


UI自动化测试之八大元素定位方法(最新版)

Selenium—UI自动化测试之八大元素定位方法(最新版)

前言

UI界面本质上就是HTML直接体现,脚本通过HTML标签信息来找到具体的元素。

元素定位:通过代码调用方法查找元素

一、ID定位

  • 概念:通过元素的id属性来定位元素
  • 前置:所要定位的元素必须要有id属性
  • 方法:driver.find_element(By.ID,“”) 示例:输入用户名和密码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.查找操作元素# 用户名
driver.find_element(By.ID,"username").send_keys("111111")# 密码
driver.find_element(By.ID,"password").send_keys("000000000")
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

二、name定位

  • ⽅法:driver.find_element(By.NAME,“name属性值”)
  • 前置: 标签必须有name属性
  • 特点: 当前⻚⾯可以重复
  • 提示: 由于name属性值可以重复,所以使⽤时需要查看是否为唯⼀

示例

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.查找操作元素# 用户名
driver.find_element(By.NAME,"username").send_keys("111111")# 密码
driver.find_element(By.NAME,"password").send_keys("000000000")
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

三、class定位

  • ⽅法:driver.find_element(By.CLASS_NAME,“class属性值”)
  • 前置: 标签必须有class属性
  • 特点: class属性可以有多个值。
  • 提示:如果标签有多个class值,只能任意选择其中一个,如下图driver.find_element(By.CLASS_NAME,“c1”)在这里插入图片描述

示例

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.查找操作元素# 用户名
driver.find_element(By.CLASS_NAME,"text_cmu").send_keys("111111")
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

四、Tag_name定位

  • 说明:根据的标签名进⾏定位
  • ⽅法:driver.find_element(By.TAG_NAME,“标签名”)
  • 提示:如果⻚⾯存在多个相同标签,默认返回第⼀个。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.查找操作元素# 用户名
driver.find_element(By.TAG_NAME,"input").send_keys("111111")
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

五、link_text定位

  • 说明:根据链接文本(a标签)定位
  • 方法:driver.find_element(By.LINK_TEXT,“链接文本”)
  • 特点:传入的链接文本,必须全部匹配,不能模糊。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.点击超链接
driver.find_element(By.LINK_TEXT,"忘记密码?").click()
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

六、partial_link_text定位

  • 说明:根据链接(a标签)文本定位
  • 方法:driver.find_element(By.PARTIAL_LINK_TEXT,“链接文本”)
  • 特点:传入的链接文本,支持模糊匹配。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.点击超链接
driver.find_element(By.PARTIAL_LINK_TEXT,"忘").click()
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

扩展-查找一组元素

  • 说明:返回列表格式,要使用需要列表下标(索引)或遍历.
  • 方法:driver.find_elements(By.TAG_NAME, “input”)
  • 特点:⼋⼤元素定位⽅法,都可以使⽤⼀组元素定位,如果没有搜索到符合标签,返回空 列表。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.查找操作元素# 查找所有的input标签
inputs = driver.find_elements(By.TAG_NAME,"input")
inputs[0].send_keys("11111")
inputs[1].send_keys("11111")
inputs[2].send_keys("11114")
time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

七、xpath定位

为什么要学习xpath,css
1.如果标签没有(id,name,class)3个属性,也不是链接标签,只能使用Tag_name定位,比较麻烦
2.方便在工作中查找元素,使用xpath和css比较方便(支持任意属性,层级)来找元素
什么是xpath?
说明:XPATH是xml path的简称,使用标签路径来定位

  1. 路径: - 绝对路径:/…/…/ 从根目录开始,逐级查找标签。 - 相对路径://…//…从任意层级开始,查找标签。 - 方法:driver.find_element(By.XPATH, “xpath表达式”)
  2. 属性:单属性://*[@属性名=’属性值’]
  3. 属性与逻辑(多个属性):多属性://*[@属性名=’属性值’ and @属性名=’属性值’] 提示:可以使用任何属性。
  4. .属性与层级:说明:如果元素现有的属性不能唯一匹配,需要结合层级使用 //语法://父标签[@属性=‘值’]/子标签 :必须为直属后代子级。//父标签//后代标签:父标签和后代之间可以跨越元素

5.扩展:

  • 根据显示文本定位://*[text()=‘文本值’] 文本值必须全部匹配
  • 属性值模糊匹配://*[contains(@属性名,‘属性部分值’)]
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 1.获取浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()# 2.输入url,打开web页面
driver.get("http://hmshop-test.itheima.net/home/User/login.html")# 3.查找操作元素# 使用绝对路径输入用户名
driver.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/div/form/div/div[1]/input").send_keys(1111)
time.sleep(2)# 使用相对路径输入用户名# driver.find_element(By.XPATH, "//div[2]//input").send_keys(2222)# 使用xpath属性输入用户名(单属性)# driver.find_element(By.XPATH, "//*[@id='username']").send_keys(2222)# 属性与逻辑/多属性(and)# driver.find_element(By.XPATH, "//*[@name='username' and @id='username']").send_keys(2222)# 属性与层级# driver.find_element(By.XPATH, "//div[@class='text_uspa']/input").send_keys(2222)# 扩展 关键字:包含 contains# driver.find_element(By.XPATH, "//input[contains(@placeholder,'手机')]").send_keys(2222)# 扩展 根据链接文本
driver.find_element(By.XPATH,"//*[text()='忘记密码?']").click()

time.sleep(3)# 4.关闭浏览器驱动对象
driver.quit()

八、css定位

  • 说明:css选择器是html查找元素的工具。
  • 策略:
          id选择器:#id属性值
          类选择器:.class属性值
          标签选择器:标签名  (注意标签名是否在页面中唯一,否则返回单个或所有)
          属性选择器:[属性名='属性值'] (标签任意属性都可以)
          层级选择器:父子关系:选择器>选择器  后代关系:选择器 选择器。(选择器使用任何一种css选择器都可以)

总结

结论:

  • 首推css选择器定位。原因:执行速度快。如果有ID属性,使用#id。如果没有id属性,使用其他有的属性(能代表唯一的属性),如果属性都代表不了唯一,使用层级。
  • 如果css解决不了,使用xpath。在这里插入图片描述

本文转载自: https://blog.csdn.net/m0_52729167/article/details/125416559
版权归原作者 软测小子 所有, 如有侵权,请联系我们删除。

“UI自动化测试之八大元素定位方法(最新版)”的评论:

还没有评论