Java Selenium执行JS删除浏览器IndexedDB无效问题排查
解决Selenium中IndexedDB删除无效的问题
以下是可能的原因和对应的解决办法:
异步操作未等待完成
indexedDB.deleteDatabase是异步API,Selenium执行完executeScript后会立刻继续后续步骤,不会等待删除操作的异步回调完成。你需要在脚本中通过Promise等待删除结果,确保操作执行完毕:JavascriptExecutor js = (JavascriptExecutor) getDriver(); js.executeScript(""" return new Promise((resolve, reject) => { const request = window.indexedDB.deleteDatabase('test-db'); request.onsuccess = () => resolve('删除成功'); request.onerror = (e) => reject(e.error); request.onblocked = () => reject('删除被其他连接阻塞'); }) """);页面上下文不匹配
确认执行脚本时,当前浏览器窗口/iframe的页面域名,和存储test-db的IndexedDB所属域名完全一致。如果测试过程中发生了页面跳转、切换到iframe等操作,当前上下文不对的话,无法访问目标数据库。需要先切换到正确的窗口或iframe,再执行删除脚本。浏览器启动参数限制
检查Selenium启动浏览器时的参数,是否添加了限制存储操作的配置(比如Chrome的--incognito模式下部分存储行为会有差异,或者--disable-storage这类禁用存储的参数),确保没有限制IndexedDB的正常操作。数据库名称拼写/大小写问题
再次核对代码中'test-db'的拼写和大小写,IndexedDB的数据库名称是严格区分大小写的,确保和实际存储的数据库名称完全一致。
内容的提问来源于stack exchange,提问作者ED209
相关产品推荐
相关产品推荐

