量角器 - 无法找到下载的文件 - 在Chrome上下载测试

时间:2017-05-22 09:53:13

标签: download protractor

我想在Google Chrome上运行e2e文件下载测试。我提到了几个帖子,包括Protractor - Jasmine - Download file to a relative pathProtractor e2e test case for downloading pdf fileSetting chromedriver preferences on protractor tests,但他们并没有让我满意。

以下是我的量角器配置的简短介绍。

    ...
    'os': 'Windows',
    'os_version': '8.1',
    'browserName': 'Chrome',
    'version': '55',
    'chromeOptions': {
        args: ['--no-sandbox', '--test-type=browser'],
        prefs: {
            download: {
                'prompt_for_download': false,
                'directory_upgrade': true,
                'default_directory': '/tmp'
            }
        }
    }
    ...

这是我的测试规范。

    it('file download test', () => {
        let filePath = path.resolve('/tmp/' + download-filename);
        // unlink(filePath);

        // click on a link by invoking anchor_element.click()
        // at the moment, file download will be done on chrome
        // with no prompt experienced

        // wait until file has been downloaded,
        //  (in fact, download can be finished within a sec)
        browser.wait(
            () => fs.existsSync(filePath),
            10000
        ).then(() => {
            // and then expectations here
        });
    });

因此,对于我的情况,文件已成功下载,但chromeOptions似乎不起作用,因为文件未下载到'default_directory'中给出的目录中。

我错了什么?或者在我的情况下,使用chrome下载文件的位置,默认情况下?

我正在使用BrowserStack for selenium服务器并运行本地测试。 我正在使用getMultiCapabilities选项配置具有多种功能的量角器。

希望有人会给我一些关键的提示。

6 个答案:

答案 0 :(得分:3)

请在conf.js中添加以下代码

prefs: {
          download: {
            'prompt_for_download': false,
            'directory_upgrade': true,
            'default_directory': downloadsPath
          }
        }

请参考首选项中的'downloadsPath'。

function checkValue() {
    if (remainingTime < 10) {
        document.getElementById("leading-zero").style.display = "inline";
    } else {
        document.getElementById("leading-zero").style.display = "none";
    }
}

我希望这会有所帮助。

由于

答案 1 :(得分:0)

尝试将MyObject objUnderTest = new MyObject(); MethodInfo methodInfo = typeof(MyObject).GetMethod("SomePrivateMethod", BindingFlags.NonPublic | BindingFlags.Instance); object[] parameters = {"parameters here"}; methodInfo.Invoke(objUnderTest, parameters); 替换为'default_directory': '/tmp'

答案 2 :(得分:0)

由于测试在不同的服务器上运行,因此不会在本地计算机上进行下载。如果硒实例在同一台计算机上,那么您的方法将很好地工作。通过在配置文件中删除硒地址再尝试一次,然后添加“ directconnect:true” 这样,您就可以将文件下载到所需的路径。

但是对于相同的用例,我指的是:Remote File Downloads How to download a file using the remote selenium webdriver?

答案 3 :(得分:0)

您必须在default_directory中提供绝对路径。

答案 4 :(得分:0)

您可以在项目中创建一个下载文件夹并为Chrome设置。 单击下载按钮后,需要浏览器等待功能来下载文件。我不知道如何在FireFox上使用它,但是Chrome通过了。我认为FireFox的偏好与Chrome的偏好不同。

  

要打开firefox的首选项:打开FF并粘贴about:config

我认为您应该使用此:

{
  browserName: 'chrome',
  acceptInsecureCerts: true,
  chromeOptions: {
    args: [
      // "--headless",
    ],
    prefs: {
      'download': {
        'prompt_for_download': false,
        'directory_upgrade': true,
        'default_directory': process.cwd() + "/resources/test/download",
      },

    },
  },
}

您可以将default_directoryprocess.cwd()__dirname一起使用绝对路径(__dirname = _ _ d a r a m e)

此外,如果您想在firefox中的about:config中找到所需的内容,则可以使用https://www.freeformatter.com/mime-types-list.html 获得Firefox偏好的价值。

答案 5 :(得分:0)

这解决了我的问题:

npm i webdriver-manager@latest

之后,下载的文件出现在default_directory