You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Chrome环境下点击按钮无法触发事件的技术求助

Selenium Java Chrome浏览器中click()触发Google Pay弹窗失效问题

场景

用户将商品加入购物车,选择Google Pay支付方式后点击“Proceed to secure payment”按钮,正常应弹出Google登录子窗口。

问题说明

脚本可成功定位该按钮并验证其可点击,但点击后无法弹出子窗口。尝试了Selenium原生click()、JavascriptExecutor点击、键盘回车及鼠标操作等多种方式均无效,但同一自动化会话中手动点击该按钮可正常弹出Google登录窗口。相同脚本在其他浏览器中可正常运行,能触发Google Pay的登录子窗口。

环境信息

  • Selenium版本:4.3.0
  • Chrome版本:104.0.5112.48、103、102

已尝试的代码

String payMethod = "GooglePay ";
if(clickPayMethodV2(payMethod)) {
    clickElement(agreeCheckBox, "Agree Terms Check box");
    Assert.assertTrue(isElemenEnbaledClickable(ProceedToSecurePay, 4), "ProceedToSecurePay button is disabled for PayPal");
    boolean status = isElemenEnbaledClickable(ProceedToSecurePay, 5);
    JavascriptExecutor js = (JavascriptExecutor) driver;    
    //js.executeScript("arguments[0].scrollIntoView();", element);  
    //Thread.sleep(1000);   
    driver.findElement(By.cssSelector("srgc2-secure-payment > form")).click();
    ProceedToSecurePay = driver.findElement(By.xpath("//button[contains(.,'Proceed to secure payment')]"));
    js.executeScript("arguments[0].focus;", ProceedToSecurePay);
    js.executeScript("arguments[0].click();", ProceedToSecurePay);
    clickElement(ProceedToSecurePay, "ProceedToSecurePay");
    
    js.executeScript("var ele = arguments[0];ele.addEventListener('click', function() {ele.setAttribute('automationTrack','true');});",ProceedToSecurePay);
    ProceedToSecurePay.click();
    System.out.println(ProceedToSecurePay.getAttribute("automationTrack")); 
    //System.out.println(ProceedToSecurePay.getShadowRoot().toString());
    click(ProceedToSecurePay, "Proceed To SecurePay button");

    clickElementJS(ProceedToSecurePay, "ProceedToSecurePay");
} else {
    logInfoExtent("Failed to click on Payment method: "+payMethod +"in checkout Step 3. PAYMENT");
    throw new TestException("Failed to select Payment method: "+payMethod +"in checkout Step 3. PAYMENT");
}

Actions action=new Actions(driver);
action.moveToElement(ProceedToSecurePay).perform();
action.moveToElement(ProceedToSecurePay).click().perform();

ProceedToSecurePay.submit();
ProceedToSecurePay.sendKeys(Keys.ENTER);

解决方案建议

  1. 匹配ChromeDriver与Chrome版本:确保ChromeDriver版本和Chrome浏览器版本严格对应,Selenium 4.3.0建议使用对应Chrome 104.x的ChromeDriver,避免版本不兼容导致交互异常。
  2. 配置Chrome权限:Google Pay弹窗依赖第三方Cookie和弹窗权限,在ChromeOptions中添加以下配置:
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-popup-blocking");
options.addArguments("--allow-third-party-cookies");
WebDriver driver = new ChromeDriver(options);
  1. 等待Google Pay初始化完成:添加显式等待,确保Google Pay的JS脚本加载完毕后再执行点击:
new WebDriverWait(driver, Duration.ofSeconds(10)).until(
    webDriver -> ((JavascriptExecutor) webDriver).executeScript(
        "return typeof google !== 'undefined' && typeof google.payments !== 'undefined'"
    )
);
ProceedToSecurePay.click();
  1. 模拟真实用户操作流程:先滚动到按钮可见区域,添加短暂延迟后执行点击:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView({block: 'center', behavior: 'smooth'});", ProceedToSecurePay);
Thread.sleep(500); // 模拟用户操作间隔
Actions actions = new Actions(driver);
actions.moveToElement(ProceedToSecurePay).click().build().perform();
  1. 排查元素拦截问题:检查是否有隐藏覆盖层拦截点击,可通过JS检测并处理:
Boolean isObscured = (Boolean) js.executeScript(
    "var rect = arguments[0].getBoundingClientRect(); " +
    "var elementFromPoint = document.elementFromPoint(rect.left + rect.width/2, rect.top + rect.height/2); " +
    "return elementFromPoint !== arguments[0];", 
    ProceedToSecurePay
);
if (isObscured) {
    // 替换为实际覆盖层的CSS选择器
    js.executeScript("arguments[0].style.display = 'none';", driver.findElement(By.cssSelector(".overlay-class")));
}
  1. 调整Chrome版本:尝试升级Chrome到105+或降级到101版本,搭配对应ChromeDriver,排查是否为特定版本的兼容性问题。

内容的提问来源于stack exchange,提问作者Automation User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:54:04