angularjs - 通过 SauceLabs 远程下载文件时如何避免 "save as"提示

标签 angularjs node.js jenkins protractor saucelabs

从 Jenkins 作业运行的 Protractor 规范,连接到 SauceLabs。它单击按钮下载 PDF,并检查文件是否已成功下载。我无法让 Chrome 浏览器不使用绝对路径打开“另存为”提示。如果我使用'~/Downloads'作为文件名,我可以避免“另存为”提示,但我的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 在哪里运行这些测试,但似乎给定我 fs.mkdir ./downloads 文件夹,然后当我 path.resolve 它,应该可以。

最佳答案

不确定这是否构成“答案”,但这就是我的处理方式。经过大量研究后,我认为测试远程虚拟机(如 SauceLabs)上下载的文件是否是不可能的。我所做的是将测试分为两部分:

  1. 测试下载按钮:单击按钮并断言没有发生错误
  2. 向按钮正在使用的底层端点 api/download 发出 GET 请求,将响应写入文件夹,然后从那里断言(使用 Nodejs)该文件存在于我的 Jenkins 项目的工作区中。这感觉很hacky,但鉴于 SauceLabs 似乎没有提供对运行 Webdriver 的虚拟机的太多访问权限,我看不到其他方法。

关于angularjs - 通过 SauceLabs 远程下载文件时如何避免 "save as"提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44833779/

相关文章:

Jenkins 工作状态 - 自定义工作颜色/状态

jenkins - Gitlab 和 Jenkins 集成新手

angularjs - 无法弄清楚为什么我的 Angular View 是空白的

angularjs - 动态添加 DOM 元素单击事件函数在 angularJs 应用程序中不起作用

javascript - Angular JS with Laravel -- 如何绑定(bind) Eloquent ORM 数组来查看

Javascript - 为每个用户创建唯一的文件

node.js - 在 Node JS 中发送低级原始 HTTP/HTTPS 请求

javascript - 使用 Angular 进行简单的 API 调用时遇到问题

node.js - 如何显示适合我的时区的时间和日期?

java - 部署到 Web 服务器时 MySQL JDBC 连接失败