如何修改Selenium JavaScript中executeScript的脚本超时时间
Selenium WebDriver JavaScript 修改executeScript脚本超时时间
问题
使用Selenium WebDriver JavaScript的executeScript执行长耗时脚本时,默认15秒会抛出ScriptTimeoutError,找不到JS库对应的配置说明,复现代码如下:
const { Builder, By, Key } = require("selenium-webdriver"); async function example() { let driver = await new Builder().forBrowser("chrome").build(); await driver.get("https://google.com"); await driver.executeScript(` await new Promise((resolve) => setTimeout(resolve, 30000)); `); console.log("DONE!"); } example();
报错信息:
ScriptTimeoutError: script timeout (Session info: chrome=118.0.5993.118) at Object.throwDecodedError (c:\Users\Admin\Documents\selenium scripts\seleniumDemo\node_modules\selenium-webdriver\lib\error.js:524:15) at parseHttpResponse (c:\Users\Admin\Documents\selenium scripts\seleniumDemo\node_modules\selenium-webdriver\lib\http.js:601:13) at Executor.execute (c:\Users\Admin\Documents\selenium scripts\seleniumDemo\node_modules\selenium-webdriver\lib\http.js:529:28) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Driver.execute (c:\Users\Admin\Documents\selenium scripts\seleniumDemo\node_modules\selenium-webdriver\lib\webdriver.js:745:17) at async example (c:\Users\Admin\Documents\selenium scripts\seleniumDemo\tests\test 4.js:8:3) { remoteStacktrace: '\tGetHandleVerifier [0x00007FF705638EF2+54786]\n' +
解决方法
通过driver.manage().setTimeouts()方法设置脚本超时时间,传入包含script字段的对象,值为超时毫秒数。
修改后的代码示例
const { Builder, By, Key } = require("selenium-webdriver"); async function example() { let driver = await new Builder().forBrowser("chrome").build(); // 设置脚本超时为35秒(35000毫秒),需大于脚本实际运行时间 await driver.manage().setTimeouts({ script: 35000 }); await driver.get("https://google.com"); await driver.executeScript(` await new Promise((resolve) => setTimeout(resolve, 30000)); `); console.log("DONE!"); } example();
说明
- Selenium JS默认脚本超时为15000毫秒(15秒),通过
setTimeouts的script参数可以自定义超时时长 - 设置的超时时间需略长于
executeScript中脚本的实际运行时间,避免触发超时错误
内容的提问来源于stack exchange,提问作者prometheusOne
相关产品推荐
相关产品推荐

