《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》

《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

在 Web 自动化测试领域,高效定位元素、精准操作对象、灵活控制浏览器行为是核心能力。尤其是在 C++ 技术栈的测试场景中,掌握标准化的自动化函数与逻辑,能大幅减少脚本报错率、提升测试效率。本文将从元素定位、测试对象操作、窗口控制、弹窗处理、等待机制等核心模块,拆解自动化测试中的常用函数与实战技巧,帮助测试工程师系统化掌握 C++ 方向 Web 自动化测试的关键能力,解决实际测试中的元素找不到、操作时序错乱、窗口切换失败等常见问题。
在这里插入图片描述

一. 元素定位:自动化测试的 “精准导航”

Web 自动化的第一步,是让程序 “找到” 页面对应元素 —— 这就需要依赖标准化的定位方式。文档中明确提到,常见的元素定位方式包括 id、classname、tagname、xpath、cssSelector,其中 cssSelectorxpath 是实际测试中最常用的两种 。

1.1 cssSelector:简洁高效的选择器

cssSelector 通过元素的属性或层级关系定位元素,分为基础选择器和复合选择器,实战中常用 id 选择器和子类选择器组合定位,确保精准性。例如:

  • 定位百度首页 “百度热搜” 元素:使用 #hotsearch-wrapper > div,通过 id 选择器(#hotsearch-wrapper)和子类选择器(>)锁定父元素下的指定子元素 ;
  • 定位百度搜索输入框:直接使用 id 选择器 #kw,因输入框的 id 属性 “kw” 在页面中唯一 ;

定位 “百度一下” 按钮:同理使用 id 选择器 #su,简洁且不易出错 。

在这里插入图片描述

1.2 xpath:灵活强大的路径语言

xpath 不仅能在 HTML 中选取节点,还支持通过路径表达式、属性匹配、索引定位等复杂逻辑查找元素,适用场景更广泛。文档中给出了 xpath 的核心语法与实战案例:

  • 匹配指定属性的节点://*[@id='kw'] 可定位 id 为 “kw” 的元素,* 表示匹配任意节点,@id='kw' 是属性匹配条件 ;
  • 按索引定位节点:xpath 索引从 1 开始,例如 //div/ul/li[3] 可定位百度首页第三个 “百度热搜” 标签 、;
  • 获取父节点://input/.. 能快速定位 input 元素的父节点,适用于需要通过子元素反向查找父元素的场景 。

值得注意的是,虽然浏览器右键 “Copy selector/xpath” 能快速生成定位表达式,但这些自动生成的表达式可能不满足 “唯一性” 要求,实际测试中常需要手动修改 —— 比如删除冗余的层级路径、补充属性匹配条件,这也是掌握定位语法的核心原因。


二. 测试对象操作:定位后的 “核心动作”

找到元素后,需要通过函数对元素执行点击、输入、文本获取等操作,文档中详细列出了 C++ 自动化测试中最常用的操作函数及实战场景。

2.1 点击与提交:触发页面交互

  • 点击操作:使用 click() 函数,例如定位 “百度一下” 按钮后执行点击,触发搜索动作,代码示例为 driver.find_element(By.CSS_SELECTOR, "#su").click()
#找到百度⼀下按钮并点击 driver.find_element(By.CSS_SELECTOR,"#su").click()
  • 提交操作:对于表单元素,可通过 submit() 函数提交表单,但实际测试中 click() 适用性更广,多数场景下优先使用。

2.2 文本输入与清除:模拟用户输入

  • 输入文本:send_keys("内容") 函数可模拟键盘输入,例如向百度搜索框输入 “迪丽热巴”,代码为 driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴")
  • 清除文本:若需要更换输入内容,需先用 clear() 函数清空原有文本,再执行新的输入 —— 比如先输入 “迪丽热巴”,1 秒后清空并输入 “古力娜扎”,完整代码需结合 time.sleep() 控制时序
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴") time.sleep(1) driver.find_element(By.CSS_SELECTOR,"#kw").clear() time.sleep(1) driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("古⼒娜扎")

2.3 文本与属性获取:验证测试结果

自动化测试中,常需要获取元素文本或属性值来验证结果是否符合预期:

  • 获取文本:通过 text 属性获取元素可见文本,例如获取百度热搜第一个标签的文本,代码为 text = driver.find_element(By.XPATH,'//*[@id="hotsearch-content-wrapper"]/li[1]/a/span[2]').text
text = driver.find_element(By.XPATH,'//*[@id="hotsearch-contentwrapper"]/li[1]/a/span[2]').text print(f"text:{text}")
  • 获取属性:通过 get_attribute("属性名称") 函数获取元素属性值 —— 比如获取按钮的 “value” 属性、链接的 “href” 属性,需注意区分 “文本” 和 “属性值”,避免混淆 ;
title = driver.title 
  • 页面信息获取:driver.title 可获取当前页面标题,driver.current_url 可获取当前页面 URL,常用于验证页面跳转是否正确。
url = driver.current_url 

三. 窗口与弹窗控制:解决 “多窗口与弹窗干扰”

自动化测试中,多窗口切换、弹窗弹出是常见场景,若不处理会导致脚本 “迷路” 或元素定位失败,文档中提供了完整的控制方案。

3.1 窗口控制:句柄是关键

每个浏览器窗口都有唯一的 “句柄(handle)”,程序通过句柄识别和切换窗口:

  • 获取句柄:driver.current_window_handle 获取当前窗口句柄,driver.window_handles 获取所有打开窗口的句柄列表 ;
  • 切换窗口:遍历所有句柄,找到与当前句柄不同的新句柄,通过 driver.switch_to.window(window) 切换到新窗口,适用于点击链接打开新页面的场景 ;
curWindow = driver.current_window_handle allWindows = driver.window_handles for window in allWindows:if window != curWindow: driver.switch_to.window(window)
  • 窗口大小与截图:driver.maximize_window()(最大化)driver.minimize_window()(最小化)可控制窗口大小;driver.save_screenshot("路径") 能截取当前屏幕,用于报错时记录现场;—— 高阶用法可结合时间戳生成唯一文件名,避免截图覆盖 。
#窗⼝最⼤化 driver.maximize_window()#窗⼝最⼩化 driver.minimize_window()#窗⼝全屏 driver.fullscreen_window()#⼿动设置窗⼝⼤⼩ driver.set_window_size(1024,768)#关闭窗口 driver.close() 注意:窗⼝关闭后driver要重新定义 
driver.save_screenshot('../images/image.png')#简单版本 driver.save_screenshot('../images/image.png')#⾼阶版本 filename ="autotest-"+datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')+'.png' driver.save_screenshot('../images/'+filename)

3.2 弹窗处理:Alert 接口来应对

页面弹窗(警告弹窗、确认弹窗、提示弹窗)无法通过常规元素定位找到,需使用 Selenium 提供的 Alert 接口:

警告 / 确认弹窗:通过 driver.switchTo.alert 切换到弹窗,alert.accept() 点击 “确定”,alert.dismiss() 点击 “取消” ;

在这里插入图片描述
alert = driver.switchTo.alert //确认 alert.accept()//取消 alert.dismiss()
  • 提示弹窗:除了 “确定 / 取消”,还需输入文本,可通过 alert.send_keys("内容") 输入,再执行确认操作。
在这里插入图片描述
alert = driver.switchTo.alert alert.send_keys("hello") alert.accept() alert.dismiss()

四、等待机制:避免 “代码快于页面渲染”

代码执行速度远快于页面渲染速度,若不设置等待,程序可能在元素未加载时就执行操作,导致 “元素找不到” 的误报。文档中介绍了三种等待方式,各有适用场景。

4.1 强制等待:简单但低效

  • 函数:time.sleep(秒数),强制让代码暂停指定时间,等待页面加载 ;
  • 优缺点:优点是使用简单,适合调试;缺点是固定等待时间,若页面提前加载完成,会浪费时间;若页面加载超时,仍会报错 。

4.2 隐式等待:全局智能等待

  • 函数:driver.implicitly_wait(秒数),设置全局等待时间,在指定时间内不断查找元素,找到则继续执行,超时未找到则报错 ;
  • 特点:作用域覆盖整个脚本,只要 driver 对象未释放(未执行 driver.quit()),等待就一直生效,无需重复设置 。

4.3 显示等待:灵活的条件等待

  • 函数:WebDriverWait(driver, 秒数).until(条件),在指定时间内等待 “条件满足”,满足则继续执行,超时则报错 ;
  • 常用条件:依赖 ExpectedConditions 类,例如 EC.presence_of_element_located(locator)(元素存在于 DOM 中)、EC.visibility_of_element_located(locator)(元素可见)、EC.alert_is_present()(弹窗出现)等 、;
  • 优缺点:优点是可自定义等待条件,灵活性高;缺点是写法复杂,需导入相关包。
from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver,2) wait.until(EC.invisibility_of_element((By.XPATH,'//*[@id="2"]/div/div/div[3]/div[1]/div[1]/div')))
方法说明
title_is(title)检查页面标题的期望值
title_contains(title)检查标题是否包含区分大小写的子字符串的期望值
visibility_of_element_located(locator, str])检查元素是否存在于页面的DOM上并且可见的期望值。
presence_of_element_located (locator, str])用于检查元素是否存在于页面的DOM上的期望值
visibility_of (element)检查已知存在于页面DOM上的元素是否可见的期望
alert_is_present ()检查是否出现弹窗

关键提醒: 隐式等待和显示等待不能混合使用!文档中的实验表明,设置 10 秒隐式等待 + 15 秒显示等待,最终会导致 20 秒后才超时,出现不可预测的等待时间。

#隐式等待设置为10s,显⽰等待设置为15s,那么结果会是5+10=15s吗? driver.implicitly_wait(10) wait = WebDriverWait(driver,15) start = time.time()try: res = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="2"]/div/div/div[3]/div[1]/div[1]/div/div/div')))except: end = time.time()print("no such element") driver.quit()print(end-start)
在这里插入图片描述

五. 其他实用功能:浏览器导航与文件上传

除了核心模块,文档还补充了浏览器导航和文件上传的常用函数,覆盖更多测试场景。

5.1. 浏览器导航:模拟前进 / 后退 / 刷新

  • 打开网站:driver.get("URL"),例如 driver.get("https://tool.lu/")
driver.get("https://tool.lu/")
  • 前进 / 后退 / 刷新:driver.forward()(前进)、driver.back()(后退)、driver.refresh()(刷新),适用于需要在多个页面间切换的测试场景 。
driver.back() driver.forward() driver.refresh()
在这里插入图片描述

5.2 文件上传:绕开系统弹窗

Selenium 无法识别系统自带的文件上传窗口,但可通过 send_keys 函数直接传入文件路径,间接实现上传:

  • 步骤:定位文件上传的 input 元素(类型为 file),调用 send_keys("文件路径"),例如 ele.send_keys("D:\\file\\test.txt")
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%A F%95/selenium4html/selenium-html/upload.html") ele = driver.find_element(By.CSS_SELECTOR,"body > div > div > input[type=file]") ele.send_keys("D:\\file\\test.txt")
  • 注意:文件路径需使用绝对路径,Windows 系统中路径分隔符需用 \\(转义)或 /

六. 浏览器参数设置:定制化测试环境

浏览器参数设置是自动化测试的 “前置配置”,通过自定义参数可模拟不同设备、禁用弹窗、设置代理等,解决特殊场景下的测试需求。以下是 C++ 自动化中常用的浏览器参数配置方法:

6.1 设置无头模式:无界面运行,适用于服务器环境

options = webdriver.ChromeOptions() options.add_argument("-headless") driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options =options)

6.2 页面加载策略

options.page_load_strategy ='加载⽅式'

页面加载方式主要有三种类型:

策略说明
normal默认值,等待所有资源下载
eagerDOM 访问已准备就绪,但诸如图像的其他资源可能仍在加载
none完全不会阻塞 WebDriver
options = webdriver.ChromeOptions() options.page_load_strategy ='eager' driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options =options)

结尾:

往期回顾:
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战-ZEEKLOG博客

结语:本文系统梳理了 Web 自动化测试中的核心函数与实战技巧 —— 从元素定位的 “精准导航”,到测试对象的 “动作执行”,再到窗口、弹窗、等待的 “异常处理”,每个模块都对应实际测试中的高频场景。掌握这些函数不仅能解决 “元素找不到”“操作时序错” 等基础问题,更能帮助我们编写稳定、高效的自动化脚本。需要注意的是,自动化测试并非 “函数堆砌”,而是需要结合具体业务场景灵活选择工具:例如定位优先用 cssSelector(高效),复杂场景用 xpath(灵活);等待优先用显示等待(精准),简单场景用隐式等待(便捷)。只有将函数与场景深度结合,才能充分发挥 C++ 自动化测试的价值,提升测试效率与质量。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

Stable Diffusion + kohya_ss 的安装教程

Stable Diffusion + kohya_ss 的安装教程

工具简介 * Stable Diffusion (SD): 开源的文本到图像生成模型,支持通过提示词生成高质量图像,内置自动标注功能(如BLIP、DeepBooru等)。 * kohya_ss (KS): 基于SD的轻量级微调工具,支持LoRA、DreamBooth等训练方法,优化显存占用与训练效率。 一.SD的安装 对于SD大家可以通过github链接来下载 https://git-scm.com/ Automatic 1111:https://github.com/AUTOMATIC1111 这里提供的链接,下载的SD是最基础的,如果大家想要让他有其他的扩展功能就需要下载相关的插件(后面会写一个关于下载插件的教程请大家持续关注)。 1.准备 Conda 环境 1.1 创建并激活 Conda 环境 # 创建名为 sd-webui 的环境(Python 3.10 推荐,需匹配仓库要求) conda

利用百川2-13B构建AIGC内容安全审核Agent实战

利用百川2-13B构建AIGC内容安全审核Agent实战 最近跟几个做内容社区和社交产品的朋友聊天,他们都在头疼同一个问题:用户生成的内容(UGC)越来越多,尤其是现在AIGC工具普及了,用户一天能生产出海量的帖子、评论、脚本,人工审核根本看不过来。更麻烦的是,里面可能夹杂着一些不合规的内容,轻则影响社区氛围,重则可能引发风险。 传统的审核规则库更新慢,面对层出不穷的新梗、黑话常常失灵。纯人工审核呢,成本高、效率低,还容易因为疲劳导致误判。有没有一种更“聪明”的办法?我们尝试用百川2-13B大模型,搭建了一个智能的内容安全审核Agent。它不只是一个简单的“是/否”过滤器,更像一个懂规则、能推理的“审核专员”,不仅能识别风险,还能给出修改建议。今天,我就把这个从架构设计到部署上线的实战过程,跟大家分享一下。 1. 为什么需要“智能”审核Agent? 先说说我们面临的几个核心痛点,可能也是很多平台正在经历的。 第一,审核维度复杂且动态变化。 内容安全不只是屏蔽几个敏感词那么简单。它涉及多个维度:政治敏感、

Leather Dress Collection从零开始:Stable Diffusion 1.5环境+LoRA镜像完整部署

Leather Dress Collection从零开始:Stable Diffusion 1.5环境+LoRA镜像完整部署 想用AI画出酷炫的皮衣皮裙,但被复杂的模型安装和配置劝退?今天,我就带你从零开始,手把手搞定一个专门生成皮革服装的AI工具——Leather Dress Collection。这是一个打包好的Stable Diffusion镜像,内置了12个不同风格的皮革服装LoRA模型,让你不用折腾环境,10分钟就能开始创作。 1. 项目介绍:这个镜像能帮你做什么? 简单来说,Leather Dress Collection就是一个“开箱即用”的AI绘画工具箱。它基于强大的Stable Diffusion 1.5模型,并集成了12个由Stable Yogi精心训练的LoRA模型。这些模型专门针对各种皮革服装风格进行了优化。 它能帮你解决什么问题? * 设计师找灵感:快速生成不同款式的皮革服装概念图。 * 电商卖家做素材:为皮衣、皮裙等商品生成吸引眼球的展示图。 * 内容创作者玩创意:为小说、游戏角色设计独特的皮革风格装扮。 * 新手学习AI绘画:免去复杂的

copilot学生认证2026-github copilot学生认证(手把手教会)

copilot学生认证2026-github copilot学生认证(手把手教会)

1.前言 博主在24年的时候发过一篇copilot认证成功的帖子,当时也是领到了一年的pro 文章链接:github copilot学生认证(手把手一小时成功)-ZEEKLOG博客 如今26年了,copilot的申请增加了一年的时间,博主也进入了研究生生涯,前段时间也是再次进行了申请,现在已经用上了,Pro 版直接解锁无限制基础功能 + 海量高级模型,我的感受是:真香!:   既然官方的申请有变化,咱们教程也得与时俱进,下面就开始手把手教大家如何进行申请copilot学生会员。 2.完善 GitHub 账号基础配置 在Emails里面加入你对应学校的教育邮箱(以edu.cn结尾),打开教育邮箱点击GitHub发送的验证邮件链接,即可完成邮箱认证 3.Github学生认证 完成上述步骤后,打开学生认证申请链接,依旧还是在设置里面,这里也可以用手机操作,因为上传证明材料用手机拍照更方便: 选择身份为学生,下滑填写学校信息,输入学校的英文,最后选择自己的学校教育邮箱,点击continue(还得分享位置) 接下来就是上传证明材料: * 可以使用手机摄像头拍摄,证件