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()
。 - 避免端口冲突:确保所选调试端口未被其他进程占用,否则可能导致连接失败。
- 页面加载状态:在执行操作前,确保页面已完全加载,以避免因页面刷新或导航而导致操作失败。