如何避免通过SauceLabs远程下载文件时的“另存为”提示

从Jenkins作业运行的量angular器规格,连接到SauceLabs。 它点击一个button来下载PDF,并检查文件是否成功下载。 我无法使Chrome浏览器使用绝对path打开“另存为”提示。 如果我使用'~/Downloads'作为filename ,但是我的browser.wait等待文件存在永远挂起,我可以避免“另存为”提示。

 // spec.js import fs from 'fs' import path from 'path' fs.mkdirSync('./downloads') describe('Clicking DOWNLOAD button', () => { it('should download a proposal', () => { const filename = path.resolve(__dirname, './downloads/proposal.pdf') if (fs.existsSync(filename)) { fs.unlinkSync(filename) } page.downloadProposalBtn.click() browser.wait(() => fs.existsSync(filename), 180000) .then(() => { expect(fs.existsSync(filename)).toBe(true) }) }, 180000) }) 

以下是我的conf文件的相关部分。 我期望的prompt_for_download设置,使提示不显示,但它..

 // conf.js capabilities: { platform: 'macOS 10.12', browserName: 'chrome', version: '59.0', screenResolution: '1400x1050', chromeOptions: { args: ['--no-sandbox', '--test-type=browser', 'disable-infobars=true'], prefs: { download: { prompt_for_download: false, directory_upgrade: true, default_directory: path.resolve(__dirname, './downloads'), }, credentials_enable_service: false, }, }, }, 

我错过了什么吗? 我觉得我可能会误解Saucelabs正在运行这些testing,但似乎给了我fs.mkdir ./downloads文件夹,然后当我path.resolve它,应该工作。

不确定这是否构成“答案”,但这是我如何继续。 经过大量的研究,我认为testing一个远程虚拟机(如SauceLabs)下载的文件是不可能的。 我正在做的是将testing分为两部分:

  1. testing下载button:点击button并声明没有错误发生
  2. 向基本端点api / GET下发GET请求,将响应写入一个文件夹,并从那里断言(使用nodejs)该文件存在于我的Jenkins项目的工作区中。 这感觉很不舒服,但是由于SauceLabs似乎没有给予webdriver运行的虚拟机多的访问权限,所以我没有看到另一种方式。

如果默认的下载目录不存在,即使该选项设置为“false”,也会得到提示。 “./downloads”是OSX语法,铬驱动程序可能不理解。

试试这个:

 default_directory: __dirname + '/downloads'