Puppeteer结合BrowserStack Local无法上传本地文件的解决方法
解决BrowserStack Local + Puppeteer 文件上传问题
一、本地文件无法通过隧道读取的修复方案
- 绑定测试会话与隧道:启动BrowserStack Local隧道时添加
--local-identifier参数(例如--local-identifier my-test-tunnel),同时在Puppeteer的能力配置中加入browserstack.localIdentifier: "my-test-tunnel",确保远程测试会话关联到你建立的隧道。 - 修正路径逻辑:代码里的
__dirname是本地脚本的路径,但BrowserStack的Puppeteer运行在远程机器上,该路径对远程环境无效。若要通过隧道上传本地文件,需先将文件放在本地HTTP服务中,但Puppeteer的uploadFile仅支持本地路径,更高效的方式是使用BrowserStack文件上传功能。
二、BrowserStack文件与媒体区的存储路径
上传至文件与媒体区的文件,会被存储在BrowserStack远程测试机器的/data/user_files/目录下。比如上传了test.png,在测试代码中直接使用路径/data/user_files/test.png即可访问。
三、调整后的上传代码示例
// 适配BrowserStack远程文件路径的上传函数 uploadFile: async (uploadSelector, fileName) => { // 直接使用BrowserStack远程机器上的文件路径 let remoteFilePath = `/data/user_files/${fileName}`; let uploadButton = await scope.page.$(uploadSelector); await uploadButton.uploadFile(remoteFilePath); await uploadButton.evaluate((upload) => upload.dispatchEvent(new Event('change', { bubbles: true })) ); }
内容的提问来源于stack exchange,提问作者Kavya AS
相关产品推荐
相关产品推荐

