博客

如何实现从桌面到浏览器跨场景自动化测试

如何实现从桌面到浏览器跨场景自动化测试

在当今软件开发中,自动化测试已成为提升效率和质量的关键手段。然而,随着应用场景的复杂化,单一的桌面或浏览器测试已无法满足需求。许多实际业务场景中,用户操作往往跨越桌面应用和浏览器,例如从桌面软件点击按钮后自动跳转至网页进行操作。这种跨场景的自动化测试需求日益增多,本文将详细介绍如何利用CukeTest工具,实现从桌面到浏览器的跨场景自动化测试,并提供一套完整的解决方案。

实现思路与原理

CukeTest是一款桌面自动化测试工具,支持Windows桌面应用和Web应用的自动化测试。借助Chrome DevTools Protocol(CDP),CukeTest能够实现桌面应用与浏览器之间的无缝衔接。具体实现思路如下:

  1. 分别录制桌面和浏览器操作:由于无法在一次录制中同时完成桌面和浏览器的操作,因此需要分别录制这两部分操作。
  2. 通过CDP协议连接浏览器:启用Chrome浏览器的远程调试端口(remote-debugging-port,通常是9222),使用connect_over_cdp方法与正在运行的浏览器进行通信。
  3. 脚本整合与优化:将桌面和浏览器的操作脚本合并为一个完整的自动化流程,确保操作的连续性和一致性。

测试场景

Wireshark是一款广泛使用的网络协议分析工具,能够捕获和分析网络数据包。它支持多种协议的解码,并提供强大的过滤和搜索功能,是网络管理员和安全分析师的必备工具。在以下测试场景中,我们将使用Wireshark作为桌面应用,结合Chrome浏览器进行跨场景的自动化测试。

  1. 打开Wireshark应用:启动Wireshark网络数据包分析工具。
  2. 通过菜单打开用户手册:在Wireshark中点击帮助(H)->内容(C),自动在Chrome浏览器中打开用户手册页面。
  3. 操作浏览器中的用户手册:在Chrome浏览器中对用户手册页面进行一系列操作,如点击目录、翻页等。

环境准备

在开展跨场景自动化测试前,请按以下步骤进行环境配置:

  1. 安装CukeTest:下载并安装Windows版本的CukeTest。
  2. 安装Chrome浏览器:确保Chrome浏览器已安装,并支持远程调试功能。
  3. 安装Wireshark:下载并安装Wireshark网络数据包分析工具。

项目创建与脚本录制

新建项目

启动CukeTest后,选择“新建项目”,输入项目名称,并选择合适的脚本语言(例如Python)和项目模板(Windows模板)。

创建项目

录制桌面应用操作

  1. 录制Chrome浏览器启动

    • 在CukeTest主界面中,打开录制设置,选择录制模式为 Win

    • 配置Chrome浏览器的完整路径(例如:C:\Program Files\Google\Chrome\Application\chrome.exe),并在参数中添加--remote-debugging-port=9222以启用远程调试端口。

    • 点击“开始录制”,CukeTest将自动启动Chrome浏览器并生成相应的启动脚本。

      录制设置

  2. 录制Wireshark启动和操作

    • 在录制过程中,点击“启动应用”按钮,并选择“新开应用”模式。

    • 在命令行输入框中填写Wireshark的完整路径(例如:C:\Program Files\Wireshark\Wireshark.exe)。

    • 点击“运行”,CukeTest会启动Wireshark并生成相应脚本。

      在录制过程中启动Wireshark

      接下来,根据之前设计的测试用例执行以下操作:

    • 点击帮助(H)打开下拉菜单,选择内容(C),Chrome浏览器将自动打开用户手册页面。

    • 完成操作后,点击停止按钮,关闭Wireshark和Chrome浏览器。

      Wireshark操作

录制后生成的桌面自动化脚本示例如下(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()

录制Web操作

  1. 在CukeTest主界面中,打开录制设置,选择录制模式为 Web

  2. 起始网址中输入用户手册页面的URL:https://wireshark.org/docs/wsug_html_chunked/index.html

  3. 点击开始录制,CukeTest将自动启动Chrome浏览器并打开该网页,同时记录所有操作。

    录制Web设置

  4. 根据测试要求,依次执行以下页面操作:

    • 点击Table of Contents目录下Preface->Foreword,跳转至Preface.html#PreForeword页面。

      网页操作步骤1

    • 点击Foreward条目右下角的Next链接,进入PreAudience.html页面。

      网页操作步骤2

    • 再点击Who should read this document?条目右下角的Next链接,进入PreAck.html页面。

      网页操作步骤3

完成操作后,点击工具栏的“停止”按钮,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连接浏览器

为实现桌面与浏览器操作的无缝衔接,需要在桌面录制脚本中添加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连接时,可能会存在多个contextpage,目标page一般位于最后一个context中,但页面顺序可能与浏览器中显示的不完全一致,因此需要在脚本中逐一匹配找到目标页面。

整合Web操作代码

在成功匹配目标页面后,将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毫秒),可根据需要调整该参数以加快执行速度。

    操作回放

注意事项

  1. 应用启动顺序
    录制时需先启动Chrome,再启动Wireshark,避免浏览器窗口遮挡Wireshark,影响后续操作。

  2. 代码精简
    部分不必要的操作可手动删除,请确保脚本中仅保留必需的操作步骤。

  3. 页面匹配
    通过CDP连接时,多个页面的顺序可能与浏览器中显示的顺序不完全一致,需逐一核对以匹配目标页面。

结语

本文介绍了如何实现桌面应用与浏览器的混合自动化测试,适用于验证用户在桌面软件与Web应用之间的真实操作路径。通过Chrome的远程调试端口和CDP协议,自动化脚本能够精确控制浏览器行为,从而实现跨应用的复杂操作流程。

值得一提的是,CukeTest工具为这类跨应用场景的自动化测试提供了支持。通过其灵活的录制和脚本生成能力,开发者可以快速构建复杂的自动化流程,显著减少手动编码的工作量,提高测试效率。