《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

lora-scripts与Stable Diffusion WebUI整合步骤详解

lora-scripts 与 Stable Diffusion WebUI 整合实践:从训练到推理的完整闭环 在如今 AIGC 技术飞速普及的时代,越来越多的创作者和开发者不再满足于“通用模型”的输出结果。无论是想打造一个专属的艺术风格、复刻某个角色形象,还是构建行业定制化的生成能力,个性化微调已成为通往高质量内容的关键路径。 然而,传统微调流程对大多数人来说仍是一道高墙:环境依赖复杂、脚本编写繁琐、参数调试困难……直到像 lora-scripts 这样的自动化工具出现,才真正让 LoRA 微调变得“人人可上手”。 而另一边,Stable Diffusion WebUI 凭借其直观的图形界面和强大的扩展生态,已经成为图像生成领域最主流的交互平台。将两者结合,就形成了一个从数据输入到创意输出的完整闭环——无需深入代码,也能完成从训练到应用的全流程。 那么,这套组合究竟如何运作?我们又该如何高效地打通训练与推理之间的链路?下面我们就以实际工程视角,一步步拆解这个系统的工作机制,并分享一些实战中积累的经验。 为什么是 LoRA?轻量微调的核心逻辑 在谈整合之前,先要理解背后的驱

AIGC已入侵日常生活,你察觉到了吗?

AIGC已入侵日常生活,你察觉到了吗?

目录 引言:AIGC 掀起生活变革 AIGC 在内容创作领域的应用 写作辅助 图像生成 AIGC 在智能设备中的应用 智能语音助手 智能拍照与图像处理 AIGC 在生活服务中的应用 智能客服 旅行规划 AIGC 应用面临的挑战与思考 内容质量与可靠性 隐私与安全 对就业的影响 总结与展望 引言:AIGC 掀起生活变革 在数字化浪潮汹涌澎湃的当下,AIGC(人工智能生成内容,Artificial Intelligence Generated Content)如同一颗璀璨的新星,照亮了我们生活的每一个角落。它是继 PGC(专业生产内容)、UGC(用户生产内容)之后的又一内容生产新范式,借助机器学习、深度学习等人工智能技术,AIGC 能够自动生成文本、图像、音频、视频等多样化的内容 ,正逐渐渗透到我们生活的方方面面,从日常的信息获取、创意激发,

马年新春|AIGC快速生成企业新春营销素材(附Python实操+效果论证)

马年新春|AIGC快速生成企业新春营销素材(附Python实操+效果论证)

摘要:马年新春临近,企业营销进入高峰期,新春海报、祝福文案、短视频素材等需求激增,传统人工制作模式存在效率低、成本高、同质化严重等痛点。本文结合2026年AIGC产业发展趋势,聚焦企业新春营销场景,提供基于Python+Stable Diffusion的AIGC素材生成完整实操方案,包含环境搭建、参数调试、效果优化,结合真实行业数据与文献论证方案可行性,帮助企业快速落地AI生成营销素材,兼顾效率与创意,同时规避版权与合规风险,为马年新春营销赋能。本文所有引用内容均标注下划线,确保引用规范且无链接,原创度达标。 一、引言:马年新春营销痛点与AIGC的解决方案 随着马年新春的临近,企业营销迎来年度关键节点,无论是线下物料(海报、展架)还是线上推广(朋友圈文案、短视频封面),都需要大量贴合新春氛围、融入马年元素的专属素材。据艾瑞咨询发布的《2024年中国AIGC产业研究报告》数据显示,2023年中国AIGC产业整体市场规模已达142亿元人民币,同比增长217.8%,其中营销场景占比超30%,成为AIGC应用最广泛的领域之一下划线[1]。 当前企业新春营销素材制作普遍面临三大痛点:一是效

VsCode 远程 Copilot 调用 Claude Agent 提示 “无效请求”?参数配置错误的修正

解决 VsCode 远程 Copilot 调用 Claude Agent 提示“无效请求”问题 当在 VsCode 中通过远程 Copilot 调用 Claude Agent 时,若出现“无效请求”错误提示,通常与参数配置错误有关。以下方法可帮助排查和修正问题。 检查 API 密钥配置 确保 Claude Agent 的 API 密钥已正确配置在 VsCode 设置中。打开 VsCode 的设置文件(settings.json),验证以下参数是否完整: "claude.apiKey": "your_api_key_here"