Selenium4.3.1报错chrome.setDefaultService is not a function如何解决
报错原因
Selenium Webdriver 从4.3.0版本开始调整了selenium-webdriver/chrome模块的API导出规则,setDefaultService不再作为方法挂载在chrome模块的默认导出对象上,直接调用chrome.setDefaultService()就会触发“is not a function”的类型错误。
修复方法
你可以根据自己的使用场景选下面任意一种方案:
- 方案1(官方推荐):构建Driver实例时直接传入配置好的Chrome服务,不需要全局设置默认服务,代码示例如下:
const { Builder } = require("selenium-webdriver"); const chrome = require("selenium-webdriver/chrome"); const service = new chrome.ServiceBuilder(myChromePath).build(); const driver = new Builder() .forBrowser("chrome") .setChromeService(service) .build();
- 方案2:如果需要全局设置默认Chrome服务,单独从chrome模块引入
setDefaultService方法后再调用,不要从chrome默认对象上取方法,代码示例如下:
const { Builder } = require("selenium-webdriver"); const chrome = require("selenium-webdriver/chrome"); // 单独导出setDefaultService方法 const { setDefaultService } = require("selenium-webdriver/chrome"); const service = new chrome.ServiceBuilder(myChromePath).build(); setDefaultService(service); // 后续构建Chrome驱动实例不需要重复传入service配置 const driver = new Builder().forBrowser("chrome").build();
补充说明:Selenium 4.x 版本迭代过程中对不少子模块的API做了拆分导出,后续遇到同类“方法不存在”的报错,可以优先检查对应方法是否支持单独从子模块引入。
内容的提问来源于stack exchange,提问作者Mahmoud Mousa Hamad
相关产品推荐
相关产品推荐

