在当今软件开发中,自动化测试已成为提升效率和质量的关键手段。然而,随着应用场景的复杂化,单一的桌面或浏览器测试已无法满足需求。许多实际业务场景中,用户操作往往跨越桌面应用和浏览器,例如从桌面软件点击按钮后自动跳转至网页进行操作。这种跨场景的自动化测试需求日益增多,本文将详细介绍如何利用CukeTest工具,实现从桌面到浏览器的跨场景自动化测试,并提供一套完整的解决方案。
CukeTest是一款桌面自动化测试工具,支持Windows桌面应用和Web应用的自动化测试。借助Chrome DevTools Protocol(CDP),CukeTest能够实现桌面应用与浏览器之间的无缝衔接。具体实现思路如下:
remote-debugging-port
,通常是9222
),使用connect_over_cdp
方法与正在运行的浏览器进行通信。Wireshark是一款广泛使用的网络协议分析工具,能够捕获和分析网络数据包。它支持多种协议的解码,并提供强大的过滤和搜索功能,是网络管理员和安全分析师的必备工具。在以下测试场景中,我们将使用Wireshark作为桌面应用,结合Chrome浏览器进行跨场景的自动化测试。
帮助(H)
->内容(C)
,自动在Chrome浏览器中打开用户手册页面。在开展跨场景自动化测试前,请按以下步骤进行环境配置:
启动CukeTest后,选择“新建项目”,输入项目名称,并选择合适的脚本语言(例如Python)和项目模板(Windows模板)。
录制Chrome浏览器启动:
在CukeTest主界面中,打开录制设置,选择录制模式为 Win。
配置Chrome浏览器的完整路径(例如:C:\Program Files\Google\Chrome\Application\chrome.exe
),并在参数中添加--remote-debugging-port=9222
以启用远程调试端口。
点击“开始录制”,CukeTest将自动启动Chrome浏览器并生成相应的启动脚本。
录制Wireshark启动和操作:
在录制过程中,点击“启动应用”按钮,并选择“新开应用”模式。
在命令行输入框中填写Wireshark的完整路径(例如:C:\Program Files\Wireshark\Wireshark.exe
)。
点击“运行”,CukeTest会启动Wireshark并生成相应脚本。
接下来,根据之前设计的测试用例执行以下操作:
点击帮助(H)
打开下拉菜单,选择内容(C)
,Chrome浏览器将自动打开用户手册页面。
完成操作后,点击停止
按钮,关闭Wireshark和Chrome浏览器。
录制后生成的桌面自动化脚本示例如下(recording.py
):
import os
from leanproAuto import RunSettings, WinAuto, Util
def recording():
RunSettings.set({"slowMo": 1000, "reportSteps": True})
modelWin = WinAuto.loadModel(os.path.dirname(os.path.realpath(__file__)) + "/recording.tmodel")
#启动应用 "chrome.exe"
Util.launchProcess("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", ["--remote-debugging-port=9222"])
#启动应用 "Wireshark.exe"
Util.launchProcess("C:\\Program Files\\Wireshark\\Wireshark.exe")
#点击 "帮助(H)"
modelWin.getMenuItem("帮助(H)").click(29, 5)
#点击 "内容(C)"
modelWin.getMenuItem("内容(C)").click(56, 13)
if __name__ == "__main__":
recording()
在CukeTest主界面中,打开录制设置,选择录制模式为 Web。
在起始网址
中输入用户手册页面的URL:https://wireshark.org/docs/wsug_html_chunked/index.html
。
点击开始录制
,CukeTest将自动启动Chrome浏览器并打开该网页,同时记录所有操作。
根据测试要求,依次执行以下页面操作:
点击Table of Contents
目录下Preface
->Foreword
,跳转至Preface.html#PreForeword
页面。
点击Foreward
条目右下角的Next
链接,进入PreAudience.html
页面。
再点击Who should read this document?
条目右下角的Next
链接,进入PreAck.html
页面。
完成操作后,点击工具栏的“停止”按钮,Chrome浏览器将自动关闭。生成的Web自动化脚本示例如下(recording_1.py
):
from leanproWeb import WebAuto
def run(webauto: WebAuto) -> None:
browser = webauto.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# Go to https://www.wireshark.org/docs/wsug_html_chunked/index.html
page.goto("https://www.wireshark.org/docs/wsug_html_chunked/index.html")
# Click text=1. Foreword
page.click("text=1. Foreword")
# Click :nth-match(:text("Next"), 2)
page.click(":nth-match(:text(\"Next\"), 2)")
# Click :nth-match(:text("Next"), 2)
page.click(":nth-match(:text(\"Next\"), 2)")
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with WebAuto() as webauto:
run(webauto)
为实现桌面与浏览器操作的无缝衔接,需要在桌面录制脚本中添加CDP连接代码。如下所示,通过connect_over_cdp
方法连接到正在运行的Chrome浏览器:
browser = WebAuto().__enter__().chromium.connect_over_cdp("http://localhost:9222")
url = "https://www.wireshark.org/docs/wsug_html_chunked/index.html"
# 获取浏览器上下文及目标页面
contexts = browser.contexts
page = None
if contexts:
# 定位目标标签页
pages = contexts[-1].pages
for p in pages:
print(f"检测到页面标题: {p.title()}\nURL: {p.url}")
if url in p.url:
page = p
print(f"\n匹配成功!页面标题: {page.title()}\nURL: {page.url}")
break
else:
print(f"未找到目标页面,目标 URL: {url}")
注意:通过CDP连接时,可能会存在多个context
和page
,目标page
一般位于最后一个context
中,但页面顺序可能与浏览器中显示的不完全一致,因此需要在脚本中逐一匹配找到目标页面。
在成功匹配目标页面后,将Web录制脚本中的页面操作代码整合到桌面录制脚本中即可:
# Click text=1. Foreword
page.click("text=1. Foreword")
# Click :nth-match(:text("Next"), 2)
page.click(":nth-match(:text(\"Next\"), 2)")
# Click :nth-match(:text("Next"), 2)
page.click(":nth-match(:text(\"Next\"), 2)")
整合后的完整脚本recording.py
示例如下:
import os
from leanproAuto import RunSettings, WinAuto, Util
from leanproWeb import WebAuto
def recording():
RunSettings.set({"slowMo": 1000, "reportSteps": True})
modelWin = WinAuto.loadModel(os.path.dirname(os.path.realpath(__file__)) + "/recording.tmodel")
# 启动 Chrome 浏览器并启用远程调试端口
Util.launchProcess("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", ["--remote-debugging-port=9222"])
# 启动 Wireshark 应用
Util.launchProcess("C:\\Program Files\\Wireshark\\Wireshark.exe")
# 执行桌面应用中的点击操作
modelWin.getMenuItem("帮助(H)").click(29, 5)
modelWin.getMenuItem("内容(C)").click(56, 13)
# 通过CDP连接到运行中的Chrome浏览器
browser = WebAuto().__enter__().chromium.connect_over_cdp("http://localhost:9222")
url = "https://www.wireshark.org/docs/wsug_html_chunked/index.html"
# 获取浏览器上下文及目标页面
contexts = browser.contexts
page = None
if contexts:
pages = contexts[-1].pages
for p in pages:
print(f"检测到页面标题: {p.title()}\nURL: {p.url}")
if url in p.url:
page = p
print(f"\n匹配成功!页面标题: {page.title()}\nURL: {page.url}")
break
else:
print(f"未找到目标页面,目标 URL: {url}")
# 执行网页操作
page.click("text=1. Foreword")
page.click(":nth-match(:text(\"Next\"), 2)")
page.click(":nth-match(:text(\"Next\"), 2)")
if __name__ == "__main__":
recording()
完成脚本整合后,下一步是验证脚本的准确性和稳定性:
运行脚本
打开recording.py
后点击“运行脚本”按钮,CukeTest将按顺序模拟所有操作,确保每一步操作均被正确执行。
观察回放效果
在回放过程中,CukeTest会还原所有录制操作。若发现执行速度较慢(由于默认启用了slowMo
参数,设置为1000毫秒),可根据需要调整该参数以加快执行速度。
应用启动顺序
录制时需先启动Chrome,再启动Wireshark,避免浏览器窗口遮挡Wireshark,影响后续操作。
代码精简
部分不必要的操作可手动删除,请确保脚本中仅保留必需的操作步骤。
页面匹配
通过CDP连接时,多个页面的顺序可能与浏览器中显示的顺序不完全一致,需逐一核对以匹配目标页面。
本文介绍了如何实现桌面应用与浏览器的混合自动化测试,适用于验证用户在桌面软件与Web应用之间的真实操作路径。通过Chrome的远程调试端口和CDP协议,自动化脚本能够精确控制浏览器行为,从而实现跨应用的复杂操作流程。
值得一提的是,CukeTest工具为这类跨应用场景的自动化测试提供了支持。通过其灵活的录制和脚本生成能力,开发者可以快速构建复杂的自动化流程,显著减少手动编码的工作量,提高测试效率。