如何用WebdriverIO(Selenium)自动化禁用Chrome剪贴板弹窗?
解决WebdriverIO中Chrome剪贴板权限弹窗无法禁用的问题
这种Chrome原生的剪贴板权限弹窗确实头疼——既不属于可通过accept()/dismiss()处理的JS弹窗,又没法用开发者工具定位,而且Selenium每次启动都是全新的临时用户配置,手动改的浏览器设置根本带不进去。我之前帮同事解决过几乎一样的问题,给你几个亲测有效的方案:
核心思路:通过Chrome启动预设配置跳过权限询问
既然每次会话都是全新的,那我们直接在启动Chrome时就告诉它“自动允许剪贴板权限请求”,完全跳过弹窗环节。具体要在WebdriverIO的capabilities配置里做文章:
方案1:配置Chrome偏好设置(最常用)
在你的wdio.conf.js文件中,找到capabilities数组,添加goog:chromeOptions配置,通过prefs预设剪贴板权限:
capabilities: [{ browserName: 'chrome', 'goog:chromeOptions': { args: [ '--disable-infobars', // 隐藏"Chrome正在被自动软件控制"的提示 '--disable-extensions' // 禁用扩展,避免干扰 ], prefs: { // 1=自动允许,2=自动拒绝,0=询问(默认) 'profile.default_content_setting_values.clipboard': 1, // 针对所有网站生效的剪贴板权限规则 'profile.content_settings.exceptions.clipboard': { '*': { 'setting': 1 } } } } }]
方案2:通过权限策略参数强制允许
如果方案1没生效,可能是网站用了新版的Clipboard API,这时候可以在Chrome启动参数里直接设置权限策略,强制允许所有网站的剪贴板读写:
capabilities: [{ browserName: 'chrome', 'goog:chromeOptions': { args: [ '--disable-infobars', '--disable-extensions', // 允许所有网站的剪贴板读写权限,不会触发弹窗 '--permissions-policy=clipboard-read=*,clipboard-write=*' ] } }]
额外提示:排除其他干扰
如果还是有弹窗,检查下是不是还有其他类型的通知弹窗,比如网站推送,可以在args里再加一个--disable-notifications参数,一次性禁用所有通知类弹窗。
为什么手动设置没用?
Selenium/WebdriverIO每次启动Chrome时,都会创建一个临时的、干净的用户配置文件,你手动在Chrome里改的设置只会保存在本地默认配置里,完全不会被自动化会话继承——这就是为什么你手动改完有用,但自动化还是会弹窗的原因。
按照上面的配置修改后,重启你的自动化会话,应该就能彻底摆脱这个剪贴板弹窗,直接操作背后的网页元素了。
内容的提问来源于stack exchange,提问作者Valley
相关产品推荐
相关产品推荐

