Node.js 如何在Progrator JS中为两个不同的浏览器设置一个测试用例?

Node.js 如何在Progrator JS中为两个不同的浏览器设置一个测试用例?,node.js,selenium-webdriver,automation,jasmine,protractor,Node.js,Selenium Webdriver,Automation,Jasmine,Protractor,我想在两个不同的浏览器上运行相同的测试用例,但它应该为彼此输出另一个结果 例如,查看下面的测试用例,一个测试步骤是捕获屏幕截图 仅适用于Chrome,另一个应仅适用于FireFox 注意测试用例中的注释,我已经复制了我想要为不同浏览器运行的代码块 请帮忙 谢谢 测试用例 describe ('Login', function() { beforeEach(function(){ browser.ignoreSynchronization = true; });

我想在两个不同的浏览器上运行相同的测试用例,但它应该为彼此输出另一个结果

例如,查看下面的测试用例,一个测试步骤是捕获屏幕截图 仅适用于Chrome,另一个应仅适用于FireFox

注意测试用例中的注释,我已经复制了我想要为不同浏览器运行的代码块

请帮忙

谢谢

测试用例

describe ('Login', function() {
    beforeEach(function(){
        browser.ignoreSynchronization = true;
    });

    afterEach(function(){
        browser.ignoreSynchronization = false;
     });

    it ('Enter to the home page', function() {
        browser.driver.get('https://user:pass@www.website.com/');
        browser.driver.sleep(1000);
            expect (browser.driver.getCurrentUrl()).toContain('meet2know.com');
        browser.driver.sleep(3000);
        //--- Capture Screenshoot for FF---
        browser.driver.takeScreenshot().then(function(data){
            var base64Data = data.replace(/^data:image\/png;base64,/,"");
            var fs = require("fs");
                fs.writeFile("homePage.png", base64Data, 'base64', function(err) {
                if(err) console.log(err);
                });
        });
        //--- Capture Screenshoot for Chrome only ---
        browser.driver.takeScreenshot().then(function(data){
            var base64Data = data.replace(/^data:image\/png;base64,/,"");
            var fs = require("fs");
                fs.writeFile("homePage-chrome.png", base64Data, 'base64', function(err) {
                if(err) console.log(err);
                });
        });
    });
});
量角器形态

//var HtmlReporter = require('protractor-html-screenshot-reporter');
var path = require('path');
var fs = require("fs");
exports.config = {
  chromeDriver: 'npm/node_modules/protractor/selenium/chromedriver',
  chromeOnly: false,
  seleniumAddress: 'http://localhost:4444/wd/hub',

  specs: ['login.js'],
  // specs: ['login.js', 'onboarding.js'],

  //specs: ['./Scripts/*.js'],

  multiCapabilities: [{
  'browserName': 'firefox',
      'cli': {
      'args': ['webdriver.firefox.useExisting=default']
      // 'args': ['webdriver.firefox.useExisting=default', '-jsconsole', '-jsdebugger']
}}, {
  'browserName': 'chrome',
  'chromeOptions': {
    args: ['--test-type','--memory-metrics','--console','--crash-on-failure','--load-extension=' + 'C:\\Users\\idan\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions\\idgpnmonknjnojddfkpgkljpfnnfcklj\\1.2.4_0'] 
    } 
}],

  // rootElement: '.main',
  framework: "jasmine",
  allScriptsTimeout: 10000,
  getPageTimeout: 10000,
  onPrepare: function() {
    require('C:\\automation\\npm\\node_modules\\protractor\\node_modules\\jasmine-reporters');
    jasmine.getEnv().addReporter(
        new jasmine.JUnitXmlReporter('xmloutput', true, true)
    );
    browser.driver.manage().window().maximize();
    return browser.driver.get('http://user:pass@www.website.com');
  },

  jasmineNodeOpts: {
      onComplete: null,
      // If true, display spec names.
      isVerbose: true,
      // If true, print colors to the terminal.
      showColors: true,
      // If true, include stack traces in failures.
      includeStackTrace: true,
      // Default time to wait in ms before a test fails.
      defaultTimeoutInterval: 660000
    }
}

我相信您希望在
takeScreenshot()
之后运行一个函数,该函数将根据正在运行的浏览器将屏幕截图保存到不同的文件中。是这样吗

如果是,则可以在量角器中查询浏览器名称(请参见)。您可以按照说明使用名称修补“browser”(使其更易于访问),或根据需要获取名称。使用该名称命名文件将类似于以下内容:

browser.driver.takeScreenshot().then(function(data){
    var base64Data = data.replace(/^data:image\/png;base64,/,"");
    var fs = require("fs");
    return browser.getCapabilities().then(function (cap) {
        var browserName = cap.caps_.browserName;
        var fname = "homePage-" + browserName + ".png";
        fs.writeFile(fname, base64Data, 'base64', function(err) {
            if(err) console.log(err);
        });
    });
});

另外,您可能希望使用
writeFileSync
,或者确保使用承诺,告诉量角器等待屏幕截图完成。(在完成处理程序中解析承诺。)

是否有方法调用此代码部分,而不是在每个测试用例中编写它?类似于“captureScreen”(“onboard-screen1-heb-”+browserName+“.png”)@P.T.@IdanE只是把整个东西放在一个函数中,它应该可以正常工作。