Webdriver IO提示printPage命令未实现 调用savePDF也报错如何解决
报错根因
printPage和savePDF是Webdriver IO DevTools协议专属API,你当前项目默认使用WebDriver协议(通过chromedriver/selenium-standalone启动服务),WebDriver标准协议未封装这两个命令,因此会触发「未实现」报错,和Chrome、chromedriver版本匹配无关。
解决方案
方案1:切换到DevTools协议运行用例
无需修改现有业务代码,只需修改wdio.conf.js配置,指定自动化协议为devtools即可:
// wdio.conf.js exports.config = { // 新增如下配置项 automationProtocol: 'devtools', // 其余原有配置保持不变 }
该协议为Webdriver IO内置能力,无需依赖chromedriver即可驱动Chrome、Edge等Chromium内核浏览器,原有printPage、savePDF调用可直接正常运行。
方案2:WebDriver协议下调用CDP原生接口实现打印
如果你的场景必须使用WebDriver协议(比如需要兼容多浏览器测试),可以直接调用Chrome DevTools Protocol的原生打印接口实现相同能力,示例代码如下:
const fs = require('fs/promises') await browser.url('https://stackoverflow.com/') // 调用CDP原生打印接口,可自定义打印参数 const pdfRes = await browser.callCDP('Page', 'printToPDF', { landscape: false, printBackground: true, paperWidth: 8.27, // A4纸宽度 paperHeight: 11.69 // A4纸高度 }) // 将返回的base64格式PDF内容写入本地文件 await fs.writeFile('./page.pdf', Buffer.from(pdfRes.data, 'base64'))
注意:该方案仅支持Chromium内核浏览器,不适用于Firefox、Safari等非Chromium内核浏览器。
方案3:升级依赖版本(仅针对已配置devtools协议仍报错的场景)
你当前使用的7.16.x版本的Webdriver IO对DevTools协议的API覆盖不全,可将所有@wdio/开头的依赖升级到最新的7.x稳定版(如^7.32.0),删除node_modules重装依赖后即可解决。
内容的提问来源于stack exchange,提问作者Matt Herbstritt
相关产品推荐
相关产品推荐

