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
相关产品推荐
相关产品推荐

