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);
解决方案建议
- 匹配ChromeDriver与Chrome版本:确保ChromeDriver版本和Chrome浏览器版本严格对应,Selenium 4.3.0建议使用对应Chrome 104.x的ChromeDriver,避免版本不兼容导致交互异常。
- 配置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);
- 等待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();
- 模拟真实用户操作流程:先滚动到按钮可见区域,添加短暂延迟后执行点击:
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();
- 排查元素拦截问题:检查是否有隐藏覆盖层拦截点击,可通过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"))); }
- 调整Chrome版本:尝试升级Chrome到105+或降级到101版本,搭配对应ChromeDriver,排查是否为特定版本的兼容性问题。
内容的提问来源于stack exchange,提问作者Automation User
相关产品推荐
相关产品推荐

