软件测试知识点总结-自动化测试常用函数

1.查找元素的核心函数

Selenium提供2个基础函数用于定位页面元素:

  1. find_element("定位方式", "元素标识")

    • 作用:查找页面中符合条件的单个元素
    • 结果:找到则返回该元素对象;未找到则直接抛出"元素不存在"的异常。
  2. find_elements("定位方式", "元素标识")

    • 作用:查找页面中所有符合条件的元素
    • 结果:返回一个包含所有匹配元素的列表(即使只有1个匹配也返回列表);未找到则返回空列表。

1.1find_elements的实际用法示例

当需要获取页面中多个相同类型的元素时,可通过find_elements遍历获取信息(以百度页面为例):

python 复制代码
# 1. 访问百度页面
driver.get("https://www.baidu.com")
# 2. 用CSS选择器定位多个元素,返回元素列表
ret = driver.find_elements(By.CSS_SELECTOR, ".hotsearch-content-wrapper > li")
# 3. 遍历列表,打印每个元素的文本内容
for i in ret:
    print(i.text)  # 输出每个元素对应的文本信息

1.2查找元素的常用方式

常用的元素定位方式包括:

  • CSS选择器(cssSelector)
  • XPath
  • ID
  • class name
    其中CSS选择器和XPath是实际项目中最常用的定位方式 ,比如示例中用"ID选择器(#su)"定位"百度一下"按钮(对应元素的id="su"属性)。
    这张图片主要讲解了Selenium自动化测试中"元素定位语法"和"测试对象操作方法",核心知识总结如下:

1.2.1CSS选择器(常用语法)

  • ID选择器#ID值 → 定位id属性对应的元素,例:#su 定位"百度一下"按钮(对应元素id="su"
  • 子选择器父元素 > 子元素 → 定位父元素下的直接子元素,例:.hotsearch-content-wrapper > li 选该类容器下的li子元素
  • 第n个元素选择器元素:nth-child(n) → 定位同层级下的第n个元素,例:li:nth-child(3) 选第三个li标签

1.2.2 XPath(常用语法)

XPath是XML路径语言,可在HTML中选取节点:

  • 匹配属性//*[@属性="值"] → 定位包含指定属性的节点,例://*[@id="kw"] 匹配id为"kw"的搜索框
    -- 获取所有节点//* → 选中HTML页面的所有节点
    -- 直接子节点定位/ 表示直接子节点,例://*[@id="hotsearch-content-wrapper"]/li[3]/a/span[2] 定位"hotsearch-content-wrapper"下第3个li里的a标签内第2个span

2.测试对象的常用操作

定位到元素后,通过以下方法对元素执行操作:

2.1点击操作:click()

  • 作用:模拟鼠标左键点击页面元素(任意可交互元素都支持)

  • 示例:

    python 复制代码
    # 定位元素后调用click()
    driver.find_element(By.CSS_SELECTOR, "目标选择器").click()

2.2模拟输入:send_keys("内容")

  • 作用:模拟键盘输入,向输入框中填写文本
  • 注意:连续调用send_keys会将内容拼接(例:连续输入"a"和"b"会得到"ab")

2.3清除文本:clear()

  • 作用:清空输入框中已有的文本内容

  • 场景:需要替换输入内容时,先clear()send_keys,示例:

    python 复制代码
    input_ele = driver.find_element(By.CSS_SELECTOR, "#kw")
    input_ele.send_keys("旧内容")
    input_ele.clear()  # 清空旧内容
    input_ele.send_keys("新内容")  # 输入新内容

2.4获取信息:获取元素/页面的关键数据

用于验证元素内容、页面跳转结果是否符合预期。

2.4.1 获取元素文本:.text

  • 作用:获取元素显示在页面上的文本内容

  • 用法示例:

    python 复制代码
    # 定位元素后,通过.text获取文本
    text = driver.find_element(By.CSS_SELECTOR, "目标选择器").text
    print(text)  # 打印文本
    assert text == "预期内容"  # 断言文本是否符合预期

2.4.2 特殊情况:获取元素属性值(.text无效时)

当文本存储在元素的属性中 (比如按钮的value属性),用.text无法获取,需用 get_attribute("属性名")

  • 作用:获取元素指定属性对应的属性值。

  • 示例(获取"百度一下"按钮的value属性):

    python 复制代码
    btn_ele = driver.find_element(By.CSS_SELECTOR, "#su")
    value = btn_ele.get_attribute("value")  # 获取value属性值(结果为"百度一下")
    print(value)

2.4.3 获取页面标题&URL

用于验证页面跳转是否正确:

  • driver.title:获取当前页面的标题(对应浏览器标签栏显示的文字)。

  • driver.current_url:获取当前页面的URL地址

  • 示例(验证页面跳转):

    python 复制代码
    print("跳转前标题:", driver.title)
    print("跳转前URL:", driver.current_url)
    # 点击元素跳转页面
    driver.find_element(By.CSS_SELECTOR, "目标链接选择器").click()
    print("跳转后标题:", driver.title)
    print("跳转后URL:", driver.current_url)

3.窗口操作:多窗口/新标签页的切换

当点击元素打开新标签页后,程序默认停留在原窗口,需手动切换窗口。

3.1窗口大小设置

通过方法调整浏览器窗口的尺寸,适配不同测试场景:

方法 作用
driver.maximize_window() 窗口最大化(自动化中常用)
driver.minimize_window() 窗口最小化
driver.fullscreen_window() 窗口全屏显示
driver.set_window_size(1024, 768) 自定义窗口尺寸(宽1024、高768)

3.2 窗口句柄(识别窗口的唯一标识)

每个浏览器窗口/标签页都有唯一的"句柄(handle)",通过以下方法获取:

  • driver.current_window_handle:获取当前窗口的句柄。
  • driver.window_handles:获取所有已打开窗口的句柄列表(按打开顺序排列)。

3.3 切换窗口:driver.switch_to.window(目标句柄)

  • 作用:切换到指定句柄对应的窗口/标签页。

  • 示例(切换到新打开的标签页):

    python 复制代码
    # 获取所有窗口句柄
    all_handles = driver.window_handles
    # 遍历句柄,切换到新窗口(通常是列表最后一个)
    for handle in all_handles:
        driver.switch_to.window(handle)

3.4故障排查必备

用于记录自动化过程中的页面状态(尤其是报错时),核心方法是 driver.save_screenshot(保存路径/文件名)

3.4.1基础用法

python 复制代码
# 保存到当前脚本所在目录,文件名为test.png
driver.save_screenshot("test.png")
# 保存到指定文件夹(需提前创建images文件夹)
driver.save_screenshot("./images/test.png")

3.4.2避免文件被覆盖:用时间戳命名

固定文件名会被后续截图覆盖,需结合datetime生成唯一文件名(注意文件名不能包含空格,需格式化时间):

python 复制代码
import datetime
# 生成带时间戳的文件名(格式:autotest-2024-06-08-103729.png)
filename = "autotest-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
# 保存到images文件夹
driver.save_screenshot("./images/" + filename)

3.5关闭窗口/浏览器

两个核心方法,适用场景不同:

  1. driver.close()

    • 作用:关闭当前激活的窗口/标签页(仅关一个)。
    • 注意:关闭后若需继续操作浏览器,需重新定位窗口;若所有窗口都关闭,driver会失效。
  2. driver.quit()

    • 作用:退出整个浏览器进程 (关闭所有标签页),同时释放driver资源。
    • 场景:自动化脚本结束时,建议用quit()彻底清理资源。

4.弹窗

4.1弹窗的核心特点

弹窗是页面的特殊交互组件,无法通过常规元素定位(如CSS/XPath)操作,且有以下特性:

  1. 页面上无法定位到弹窗元素
  2. 弹窗出现后,页面其他元素也无法被定位 ,会抛出UnexpectedAlertPresentException异常;
  3. 必须先处理弹窗,才能继续操作页面其他元素。

4.2弹窗的3种类型

根据交互形式,弹窗分为3类:

弹窗类型 特点 交互按钮/组件
警告弹窗 仅展示提示信息 只有「确定」按钮
确认弹窗 需选择"确认/取消"操作 「确定」+「取消」按钮
提示弹窗 支持输入文本后再确认/取消 输入框 + 「确定」+「取消」按钮

4.3弹窗的处理流程与方法

通过Selenium的Alert接口处理,步骤为"切换到弹窗 → 执行操作":

4.1切换到弹窗

先将操作焦点切换到弹窗对象(Selenium 4写法):

python 复制代码
alert = driver.switch_to.alert

4.2弹窗操作方法

根据弹窗类型,调用对应方法:

  • 点击「确定」:alert.accept()(适用于所有弹窗)
  • 点击「取消」:alert.dismiss()(适用于确认/提示弹窗)
  • 输入文本(仅提示弹窗):alert.send_keys("输入内容")

4.3Selenium自动化中"元素定位失败"的两类常见问题及临时解决思路

4.3.1问题1:CSS选择器包含特殊字符,导致"非法选择器"报错
  • 场景:当元素的标识(如ID)以特殊字符/数字开头(比如ID为"1"),直接写CSS选择器(如#1)会触发错误。
  • 错误提示:javascript error: an invalid or illegal selector was specified(非法选择器)。
  • 解决:对特殊字符做转义处理 ,比如ID为"1"的元素,CSS选择器需写成#\\31(注意转义符的使用)。
4.3.2问题2:脚本执行速度 > 页面加载速度,导致"元素找不到"
  • 核心原因:脚本执行速度快,但页面资源(元素)还没加载完成,此时定位元素会失败。

  • 错误提示:NoSuchElementException: no such element: Unable to locate element(无法定位元素)。

  • 临时解决方法:添加硬等待(time.sleep(n) ,让脚本暂停n秒,等页面加载完成后再执行定位操作。
    示例:

    python 复制代码
    time.sleep(3)  # 暂停3秒,等待页面加载
    driver.find_element(By.CSS_SELECTOR, "目标选择器")  # 此时元素已加载,可定位到

(注:硬等待是临时方案,更优的是用显式等待精准等待元素加载,避免无效等待)

相关推荐
oscar9993 天前
构建敏捷团队的DevOps测试策略:速度与可靠性的平衡艺术
运维·测试·devops
池央3 天前
软件测试知识点总结1
软件测试·测试
望未来无悔4 天前
软件测试理论
测试
databook8 天前
【总结整理】软件测试的反模式
单元测试·测试
大话性能8 天前
Python多线程总结
测试
Apifox9 天前
Apifox CLI + Claude Skills:将接口自动化测试融入研发工作流
前端·后端·测试
阿蔹9 天前
接口测试用例的设计方法
功能测试·接口测试·测试
Lucifer__hell9 天前
【Pytest】笔记
笔记·pytest·测试
阿蔹10 天前
Session与Cookies
selenium·测试