测试自动化学习第一部分

测试自动化学习

  1. 接口自动化:绕过浏览器,http 请求直接和服务器通信,速度快、稳定
  2. UI 自动化:模拟人操作浏览器点击、输入,用来校验页面展示、弹窗、跳转

Selenium + WebDriver 原理

  1. selenium本身是做UI自动化的。
  2. 所有的自动化测试都是基于浏览器来执行的
def get_edge_driver():
    driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))#必要内容
    return driver# 只负责启动浏览器,不需要参数
driver = get_edge_driver()# 1.启动浏览器
driver.get("https://www.baidu.com")# 2.访问百度网址
  1. webdriver主要是起到一个连接python(selenium代码)与浏览器的一个作用
  2. selenium中的by类,by用来定义定位元素的方法的,实际上by类将支持的八种元素定位的字符串值写成了by类的属性。除去selenium 4的相对定位器以外,一般只需要直接传字符串即可

元素定位:

所有的UI自动化都离不开的操作

八大元素定位(最常用 4 种:id、name、xpath、class_name)

元素定位八大法则:
  1. id:针对元素包含id属性时,通过id属性进行的定位操作
  2. name:针对元素包含name属性时,通过name属性进行的定位操作(name的属性值是允许被重复的)
  3. tag name:针对元素包含标签属性时,通过标签属性进行的定位操作(一定会获取到多个重复的信息)
  4. class:针对元素包含class属性时,通过class属性进行的定位操作(不推荐使用,有时会报错)
  5. link test:通过元素的文本信息进行的定位操作,只支持A标签的定位(超链接的元素定位)
  6. partial link test:通过元素的文本信息进行的模糊定位操作,只支持A标签定位
  7. 万金油一号——css selector(浏览器可以直接复制):基于元素的class属性,结合特有的语法结构来实现的定位的方式(速度最快定位方法

b站主页为例

  • 这是css selector的属性:#app > div.bili-feed4 > main
  1. 万金油二号——xpath(浏览器可以直接复制):基于元素的路径结构,结合特有的语法结构来实现的定位的方式(速度最慢定位方法)//ps:也没慢到哪去就差个几毫秒

b站为例:

  • xpath相对路径//*[@id="app"]

    • 语法结构:
      • //:从根路径下开始查找
      • *:表示任意标签
      • []:表示添加筛选条件
      • @:表示基于属性查找
      • id=:表示查找的属性的名称为id,且值为
      • "app":查找的元素对应的属性值
  • xpath绝对路径/html/body/div[2]/div[2]/div[2]

元素定位容易出错的地方:

  1. 表达式错误
  2. 获取的元素不可交互,需要交互的元素为它的父级,子集或者同级
  3. 没有添加合理的等待条件
  4. 没有做句柄的切换
  5. 没有做iframe的切换

相关代码的编写

  • 搜索定位框
元素变量 = WebDriverWait(driver,超时秒数).until(
    EC.等待条件((By.定位方式,"定位的值"))
)
#一般可写为以下形式
search_input = WebDriverWait (driver,10).until (
EC.element_to_be_clickable ((By.定位方式,"定位的值"))
)
#其中的By.定位方式,"定位的值"用的是上面的八大类
By.NAME,"定位的值"
By.ID,"定位的值"
By.CLASS_NAME,"定位的值"
By.XPATH,'相对路径'#如By.XPATH,'//input[@name="wd"]'
By.CSS_SELECTOR,"对应属性"#如By.CSS_SELECTOR,'input[name="wd"]'
By.LINK_TEXT,"定位的值"
By.PARTIAL_LINK_TEXT,"定位的值"
By.TAG_NAME,"定位的标签名"
name_input.send_keys("想输入的名字")

锚点等待思路

  1. 第一个元素加等待 = 确认页面加载完成(一般全用第一种就行)

页面刚用 driver.get() 打开时,DOM 是逐步渲染的,第一个操作的元素最容易出现 “还没加载出来” 的问题。给姓名输入框加显式等待,相当于做了一次 “页面是否渲染完成” 的校验 —— 只要这个输入框能点击了,说明整个表单的 DOM 已经加载完毕。

# 例子
name_input = wait.until(EC.element_to_be_clickable((By.ID, "user_name")))
name_input.clear()
name_input.send_keys("张三")
  1. 后面元素简写 = 依赖前面的锚点

本地页面是纯静态 HTML,所有表单元素是一次性全部渲染进 DOM 的,不存在 “先出姓名框、后出邮箱框” 的动态加载逻辑。既然姓名框都能点击了,邮箱、下拉框、按钮这些元素肯定也已经存在了,所以可以直接用 find_element 简写,少写几行代码。

更新web driver

pip install --upgrade webdriver-manager selenium
posted @ 2026-08-07 23:16  星之奔流  阅读(3)  评论(0)    收藏  举报