繁体   English   中英

Angular 中的 e2e 测试:使用 firefox 中的 protractor 无法上传和下载文件

[英]e2e testing in Angular: uploading and downloading a file doesn't work using protractor in firefox

首先我应该指出,我们正在使用 docker 运行 web 应用程序。

当我在 Firefox 中使用 protractor 下载文件时收到提示,这会阻止我下载,所以我试图通过修改protractor.conf.js文件来禁用下载提示(如下)。

当我尝试在无头模式下使用 Firefox 上传文件时,出现错误Failed: Failed to decode response from marionette但如果我禁用无头模式,它工作正常。

我需要在此测试中使用 Firefox 和无头模式,我尝试使用 chrome 运行测试并且它有效,该问题仅在使用 Firefox 时发生。 有人可以在这里为我提供帮助吗?

PS:我已经研究过其他类似的问题,但解决方案已经过时(angularjs),它们对我不起作用。

Protractor.conf.js

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: 
    // { browserName: 'chrome',
    //   chromeOptions: {
    //     args: ['--headless', "--disable-gpu", '--no-sandbox'],
    //     // prefs: {
    //     //     'download': {
    //     //         prompt_for_download: false,
    //     //         // 'directory_upgrade': true,
    //     //         // 'default_directory': '/home/houssem/Desktop'
    //     //     }
    //     // }
    //   }
    // },
    { browserName: 'firefox',
      marionette: true,
      acceptInsecureCerts: true,
      'moz:firefoxOptions': {
       args: [ "--headless" ],
        prefs: {
          'pdfjs.disabled': true,
          'browser.download.folderList' : 0,
          'browser.download.dir' : process.cwd() + "/Desktop",
          'browser.download.panel.shown': false,
          'browser.download.useDownloadDir': true,
          'browser.download.manager.useWindow': false,
          'browser.helperApps.alwaysAsk.force': false,
          'browser.helperApps.neverAsk.openFile': true,
          'browser.download.manager.closeWhenDone': false,
          'browser.download.manager.alertOnEXEOpen': false,
          'browser.download.manager.showWhenStarting': false,
          'browser.download.manager.focusWhenStarting': false,
          'browser.download.manager.showAlertOnComplete': false,
          'browser.helperApps.neverAsk.saveToDisk' : 'image/svg+xml,image/vnd.dxf,image/png,image/x-citrix-png,image/x-png', 
        },
      },
    },
  
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
  },

app.e2e-spec.ts

it('Testing upload button', () => {      
        page.navigateTo('/rules');
        var path = require('path');
        var fileToUpload = '../../tests/rules/rule-regex.json';
        var absolutePath = path.resolve(__dirname, fileToUpload);
        page.upload(absolutePath);
  });


  it('Testing download button', () => {      
        page.navigateTo('/nodeSymbols');
        page.download();
  });

应用程序.po.ts

 upload(file){
    element(by.css('.controlPanel .batchUpload')).click();
    element(by.css('#batchUploadInput')).sendKeys(file);
  }

  download(){
    for (let i = 0; i < 6; i++) {
      element(by.css('.controlPanel .download')).click();
      element.all(by.css('#downloadMenu .downloadOption')).get(i).click();
    }
  }
framework: 'jasmine',

capabilities:     { browserName: 'firefox',
      marionette: true,
      acceptInsecureCerts: true,
      'moz:firefoxOptions': {
       args: [ "--headless" ],
        prefs: {
          'browser.download.folderList': 2, // custom location,
          'browser.download.manager.showWhenStarting':false,
          'browser.download.dir':'/srv/download',
          "browser.download.manager.alertOnEXEOpen": false,
          "browser.download.manager.closeWhenDone": false,
          "browser.download.manager.focusWhenStarting": false,
          'browser.helperApps.neverAsk.saveToDisk' : 'application/x-msdownload,application/octet-stream,image/svg+xml,image/vnd.dxf,image/png,image/x-citrix-png,image/x-png,image/jpeg,image/jpg'
        },
      },
    },
 

这适用于例如尝试:

describe('workspace-project App', function () {
  it('Test Puppeteer screenshot', async function()  {
    await browser.get('https://unsplash.com/photos/gD1t-iP_X4A')
    
    var EC = protractor.ExpectedConditions;
    await  browser.wait(await EC.elementToBeClickable($('[class="_13Q- _27vvN _2iWc-"]')), 5 * 1000, 'Server should start within 5 seconds');

    await $('[class="_13Q- _27vvN _2iWc-"]').click()
    
    await browser.sleep(6000)
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM