使用Playwright自动化Razor Pay支付时,点击Success按钮打开新窗口而非标签页
解决Playwright中Razor Pay Success按钮点击打开新窗口而非标签页的问题
问题场景
使用Playwright自动化测试Razor Pay支付流程时,支付成功后打开的新标签页中,点击Success按钮会触发新浏览器窗口打开,而非预期的新标签页,需要调整为在新标签页打开。
可行解决方案
方案1:修改按钮的target属性强制在新标签页打开
在点击Success按钮前,通过evaluate方法修改元素的target属性为_blank,强制浏览器在新标签页打开链接:
// 先修改按钮的target属性 await successTab.locator(Located.byExactText('Success')).evaluate(el => { el.target = '_blank'; }); // 再点击按钮 await successTab.locator(Located.byExactText('Success')).click();
方案2:拦截Popup事件并在新标签页重定向
如果按钮通过window.open触发新窗口,可以监听popup事件,获取目标URL后在当前上下文的新标签页打开,同时关闭原弹窗:
// 监听successTab页面的popup事件 successTab.once('popup', async (popupWindow) => { // 获取弹窗的目标URL const targetUrl = await popupWindow.url(); // 在当前浏览器上下文打开新标签页并跳转 const newTab = await successTab.context().newPage(); await newTab.goto(targetUrl); // 关闭原弹窗窗口 await popupWindow.close(); }); // 点击Success按钮 await successTab.locator(Located.byExactText('Success')).click();
方案3:配置浏览器启动参数合并窗口与标签页
启动浏览器时添加参数,强制浏览器将新窗口合并为标签页(该参数依赖Chrome/Edge等Chromium内核浏览器):
const { chromium } = require('playwright'); const browser = await chromium.launch({ args: ['--merge-tabs-and-windows'] });
说明
出现该问题的核心原因是Success按钮的跳转逻辑(如JS的window.open配置、HTML元素的target属性)指定了打开新窗口,Playwright默认遵循浏览器原生行为,通过上述方法可强制调整为新标签页打开的行为。
内容的提问来源于stack exchange,提问作者Viraj Sangale
相关产品推荐
相关产品推荐

