HOWTO: 操作已打开的浏览器实例

在自动化测试和开发过程中,连接到已打开的浏览器实例,而非每次启动新的实例,不仅能够提高调试效率,还能简化操作流程。此方法在跨应用测试场景下尤为实用。CukeTest 支持通过远程调试端口连接到已运行的 Chrome 浏览器,适用于以下应用场景:

  • 调试测试用例:复用现有的浏览器实例,避免频繁启动和关闭浏览器。
  • 跨应用测试:模拟用户在桌面应用和 Web 应用之间切换,实现无缝衔接的桌面到 Web 测试场景。

本文将以 Chrome 浏览器为例,介绍如何连接到已打开的浏览器并在其中进行页面操作。

操作步骤

1. 启动 Chrome 并设置远程调试端口

为使 CukeTest 连接到 Chrome,需要先启动 Chrome 并设置远程调试端口。可以使用以下参数:

  • --remote-debugging-port:指定 Chrome 的远程调试端口。

想了解更多 Chrome 启动参数的用法,请参阅 HOWTO: Chrome带配置项启动

手动启动 Chrome

您可以在命令行中执行以下命令启动 Chrome,确保路径正确:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222

注意:请根据实际安装路径替换 chrome.exe 的位置。

在自动化脚本中启动 Chrome

您还可以在自动化脚本中使用 Util 库的 launchProcess() 方法来启动 Chrome。例如:

JavaScript
Python
const { Util } = require('leanpro.common');

(async function () {
    let chrome_path = "path/to/your/chrome/chrome.exe";
    let args = ['--remote-debugging-port=9222'];
    await Util.launchProcess(chrome_path, args);
})();
from leanproAuto import Util

chrome_path = "path/to/your/chrome/chrome.exe"
args = ['--remote-debugging-port=9222']
Util.launchProcess(chrome_path, args)

提示:请确保 Chrome 实例没有被其他自动化工具占用,以避免端口冲突。

2. 连接到已运行的 Chrome 实例

CukeTest 支持通过 Chrome DevTools 协议 (CDP) 连接到已打开的 Chrome 浏览器,实现对其页面的控制。以下示例展示了如何连接到 Chrome 浏览器并找到指定的标签页:

JavaScript
Python
const { chromium } = require('leanpro.web');

(async function () {
    let url = "your_url";
    let pages, page;
    // 连接到已运行的 Chrome 实例
    const browser = await chromium.connectOverCDP('http://localhost:9222');
    // 获取所有浏览上下文
    const contexts = browser.contexts();

    if (contexts.length > 0) {
        // 定位需要操作的标签页
        pages = contexts[contexts.length - 1].pages();
        for (p of pages) {
            if (p.url().includes(url)) {
                page = p;
                break;
            }
        }
        console.log("页面标题: ", await page.title());
    } else {
        console.log("未找到任何页面。");
    }
})();
from leanproWeb import WebAuto

url = "your_url"
# 连接到已运行的 Chrome 实例
browser = WebAuto().__enter__().chromium.connect_over_cdp("http://localhost:9222")
contexts = browser.contexts
page = None

if contexts:
    # 定位需要操作的标签页
    pages = contexts[-1].pages
    for p in pages:
        if url in p.url:
            page = p
            break
    print("页面标题: ", page.title())
else:
    print("未找到任何页面。")

3. 在页面上执行操作

成功连接到目标页面后,您可以在该页面上执行各种操作,例如点击按钮或输入文本。以下代码展示了如何在页面上点击一个按钮:

JavaScript
Python
(async function () {
    await page.click("#submit-button");
    console.log("点击了提交按钮");
})();
page.click("#submit-button")
print("点击了提交按钮")

注意事项

  • 关闭连接:通过 CDP 建立的 browser 对象仅在调用 browser.close() 时断开连接,但不会关闭 Chrome 本身的窗口。若需关闭浏览器窗口,请使用 page.close()context.close()
  • 避免端口冲突:确保所选调试端口未被其他进程占用,否则可能导致连接失败。
  • 页面加载状态:在执行操作前,确保页面已完全加载,以避免因页面刷新或导航而导致操作失败。

results matching ""

    No results matching ""