量angular器e2etesting案例下载pdf文件

谁能告诉我如何编写testing用例链接使用茉莉花框架下载PDF文件? 提前致谢。

我目前可以设置下载path的位置

capabilities: { 'browserName': 'chrome', 'platform': 'ANY', 'version': 'ANY', 'chromeOptions': { // Get rid of --ignore-certificate yellow warning args: ['--no-sandbox', '--test-type=browser'], // Set download path and avoid prompting for download even though // this is already the default on Chrome but for completeness prefs: { 'download': { 'prompt_for_download': false, 'default_directory': '/e2e/downloads/', } } } }, 

对于远程testing,您需要更复杂的基础设施,如设置Samba共享或networking共享目录目的地。

火狐

 var FirefoxProfile = require('firefox-profile'); var q = require('q'); [...] getMultiCapabilities: getFirefoxProfile, framework: 'jasmine2', [...] function getFirefoxProfile() { "use strict"; var deferred = q.defer(); var firefoxProfile = new FirefoxProfile(); firefoxProfile.setPreference("browser.download.folderList", 2); firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false); firefoxProfile.setPreference("browser.download.dir", '/tmp'); firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); firefoxProfile.encoded(function(encodedProfile) { var multiCapabilities = [{ browserName: 'firefox', firefox_profile : encodedProfile }]; deferred.resolve(multiCapabilities); }); return deferred.promise; } 

最后,也许很明显,触发下载你点击下载链接,如你所知,例如

 $('a.some-download-link').click(); 

我需要检查下载的文件的内容(在我的情况下CSV导出)与预期的结果,并发现以下工作:

 var filename = '/tmp/export.csv'; var fs = require('fs'); if (fs.existsSync(filename)) { // Make sure the browser doesn't have to rename the download. fs.unlinkSync(filename); } $('a.download').click(); browser.driver.wait(function() { // Wait until the file has been downloaded. // We need to wait thus as otherwise protractor has a nasty habit of // trying to do any following tests while the file is still being // downloaded and hasn't been moved to its final location. return fs.existsSync(filename); }, 30000).then(function() { // Do whatever checks you need here. This is a simple comparison; // for a larger file you might want to do calculate the file's MD5 // hash and see if it matches what you expect. expect(fs.readFileSync(filename, { encoding: 'utf8' })).toEqual( "A,B,C\r\n" ); }); 

我发现Leo的configurationbuild议对于允许将下载保存在可访问的地方是有帮助的。

30000ms的超时时间是默认值,所以可以省略,但是如果有人想改变它,我会留下来提醒一下。

它可能是检查href属性的testing,如下所示:

 var link = element(by.css("a.pdf")); expect(link.getAttribute('href')).toEqual('someExactUrl'); 

过去我做的一件事就是使用HTTP HEAD命令。 基本上,它和'GET'是一样的,但它只是检索标题。

不幸的是,Web服务器需要明确支持“HEAD”。 如果是这样的话,你可以尝试使用URL,然后在Content-Type中检查'application / pdf',而不必实际下载文件。

如果服务器没有被设置为支持HEAD,那么可以像上面build议的那样检查链接文本。