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

Katalon执行acceptAlert报错,无法处理Alert弹窗求助

解决Katalon中无法接受Alert弹窗的问题

问题描述

在使用Katalon尝试接受Alert弹窗时,出现“Unable to accept Alert”错误。已在Project>WebUI Chrome Settings中配置相关设置,可通过WebUI.getAlertText()获取弹窗文本,但仍无法接受或关闭弹窗;尝试使用WebDriver代码:

//WebDriver myDriver = DriverFactory.getWebDriver()
//myDriver.switchTo().alert().accept();

问题依然存在。版本信息:Chrome浏览器版本107.0.5304.122,chromedriver版本107.0.5304.62。报错详情如下:

ERROR c.k.k.core.keyword.internal.KeywordMain  - ❌ Unable to accept alert (Root cause: com.kms.katalon.core.exception.StepFailedException: Unable to accept alert
    at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.stepFailed(WebUIKeywordMain.groovy:64)
    at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.runKeyword(WebUIKeywordMain.groovy:26)
    at com.kms.katalon.core.webui.keyword.builtin.AcceptAlertKeyword.acceptAlert(AcceptAlertKeyword.groovy:71)
    at com.kms.katalon.core.webui.keyword.builtin.AcceptAlertKeyword.execute(AcceptAlertKeyword.groovy:66)
    at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:74)
    at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords.acceptAlert(WebUiBuiltInKeywords.groovy:1522)
    at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords$acceptAlert$14.call(Unknown Source)
    at TC-RXF-T186-Administration-Benefit-Config-Create-Plan.run(TC-RXF-T186-Administration-Benefit-Config-Create-Plan:145)
    at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
    at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
    at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:448)
    at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:439)
    at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:418)
    at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:410)
    at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:285)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:142)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:133)
    at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
    at TempTestCase1669612699119.run(TempTestCase1669612699119.groovy:25)
Caused by: org.openqa.selenium.NoAlertPresentException: no such alert
  (Session info: chrome=107.0.5304.122)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'CLVITN-GN78GG3', ip: '192.168.1.3', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_282'
Driver info: com.kms.katalon.selenium.driver.CChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 107.0.5304.122, chrome: {chromedriverVersion: 107.0.5304.62 (1eec40d3a576..., userDataDir: C:\Users\U6070629\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:50294}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
Session ID: 0eb4ccf902aabae64bfb75971a179026
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at com.kms.katalon.selenium.driver.CChromeDriver.execute(CChromeDriver.java:19)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:609)
    at org.openqa.selenium.remote.RemoteWebDriver$RemoteAlert.accept(RemoteWebDriver.java:947)
    at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringAlert.accept(EventFiringWebDriver.java:795)
    at com.kms.katalon.core.webui.keyword.builtin.AcceptAlertKeyword$_acceptAlert_closure1.doCall(AcceptAlertKeyword.groovy:75)
    at com.kms.katalon.core.webui.keyword.builtin.AcceptAlertKeyword$_acceptAlert_closure1.call(AcceptAlertKeyword.groovy)
    at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.runKeyword(WebUIKeywordMain.groovy:20)
    at com.kms.katalon.core.webui.keyword.builtin.AcceptAlertKeyword.acceptAlert(AcceptAlertKeyword.groovy:71)
    at com.kms.katalon.core.webui.keyword.builtin.AcceptAlertKeyword.execute(AcceptAlertKeyword.groovy:66)
    at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:74)
    at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords.acceptAlert(WebUiBuiltInKeywords.groovy:1522)
    at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords$acceptAlert$14.call(Unknown Source)
    at Script1564390069306.run(Script1564390069306.groovy:145)
    ... 11 more
)

解决方法

1. 增加显式等待确保Alert状态稳定

虽然能获取Alert文本,但执行accept时可能存在时序问题,添加等待确保Alert处于可交互状态:

import org.openqa.selenium.support.ui.WebDriverWait
import org.openqa.selenium.support.ui.ExpectedConditions

WebDriver myDriver = DriverFactory.getWebDriver()
// 最长等待10秒,直到Alert出现
WebDriverWait wait = new WebDriverWait(myDriver, 10)
wait.until(ExpectedConditions.alertIsPresent())
// 执行接受操作
myDriver.switchTo().alert().accept()

2. 排查是否为伪Alert(自定义弹窗)

部分页面会用HTML/CSS模拟Alert样式,并非原生JS Alert,此时原生方法无法处理。通过浏览器开发者工具检查:原生Alert无法在Elements面板找到,伪Alert会有对应的HTML元素。如果是伪Alert,直接定位确认按钮点击:

// 替换为实际确认按钮的测试对象或选择器
WebUI.click(findTestObject('确认按钮'))

3. 修改ChromeDriver的弹窗处理配置

在Katalon的Project>Settings>Desired Capabilities>WebUI>Chrome中添加配置:

  • 名称:unhandledPromptBehavior
  • 值:accept
    保存后重新运行,让ChromeDriver自动处理未处理的弹窗。

4. 用JavaScript直接处理Alert

绕过Katalon/WebDriver的Alert逻辑,通过JS代码接受弹窗:

WebDriver myDriver = DriverFactory.getWebDriver()
// 覆盖弹窗方法,默认确认弹窗
myDriver.executeScript("window.alert = function(){}; window.confirm = function(){return true;};")

或者针对当前已弹出的Alert执行:

WebUI.executeJavaScript("window.confirm();", [])

5. 验证版本兼容性并更新工具

虽然当前Chrome与ChromeDriver版本匹配,但可尝试更新到最新稳定版,同时确保Katalon Studio为最新版本,排除工具本身的适配bug。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:20:51