远程文件下载

时间:2017-12-19 15:50:09

标签: selenium-webdriver protractor selenium-chromedriver

背景:使用Protractor和Chrome进行一些文件下载测试。我在selenium网格上运行,因此测试和我的Node env正在服务器上执行(例如8.2.2.2),而文件下载是在远程Windows机器上(例如14.3.3.3)。

文件下载曾经存储在同一个服务器上,也开始了测试,所以我只是在执行断言之前等待文件存在:

browser.wait(() => {
    return fs.existsSync(filePath)
}).then(() => {
    // expect something
})

问题:现在,这些文件没有写入服务器(它们直接下载到浏览器中),所以到目前为止我没有什么可以抓住的。由于我使用的是selenium网格,因此我无法直接从测试服务器读取远程计算机。

问题:量角器浏览器对象或chromedriver是否有关于我可以抓取的文件下载的任何信息?试图找到一种方法来访问文件名和文件大小?我正在挖掘浏览器对象,但还没有找到任何东西。

2 个答案:

答案 0 :(得分:0)

忘了这个从来没有回答,所以我会在@Florent B帮助我发表评论之后发布我自己的解决方案。为简单起见,我把它打破了,代码可以更清晰(也取决于你的用例):

it('generates a file', () => {
    // begin file download
    btnGenerateReport.click()
    .then(() => {
        // open a new window to leave current one in state
        return browser.executeScript('window.open()')
    })
    .then(() => {
        // switch to new window
        return browser.getAllWindowHandles().then((handles) => {
            return browser.switchTo().window(handles[1]);
        })
    })
    .then(() => {
        // navigate to downloads
        return browser.get('chrome://downloads')
    })
    .then(() => {
        // pauses tests until download has 1 item AND item status is 'Complete'
        return browser.wait(() => {
            return browser.executeScript('return downloads.Manager.get().items_.length > 0 && downloads.Manager.get().items_[0].state === "COMPLETE"');
        }, 600000, `"downloads.Manager.get().items_" did not have length > 0 and/or item[0].state did not === "COMPLETE" within ${600000/1000} seconds`)
    })
    .then(() => {
        // get downloads
        return browser.executeScript('return downloads.Manager.get().items_');
    }).then((items) => {
        // this is your download item(s)
        console.log(items);
    });
});

答案 1 :(得分:0)

要断言使用量角器/硒远程下载文件:

  1. 在远程服务器上手动创建FTP服务器以托管下载文件夹

  2. 设置下载功能,无需提示即可下载到量角器中的该特定文件夹(通过FTP托管)

    capabilities: {
        browserName: "chrome",
        chromeOptions: {
            args: ["--disable-gpu"],
            prefs: {
                download: {
                    prompt_for_download: false,
                    directory_upgrade: true,
                    default_directory: `${__dirname}\\src\\json.file\\`
                }
            }
        }
    }

  3. 使用节点中的任何ftp模块声明文件夹的内容

npm install ftp-client