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

时间:2015-04-26 13:39:19

标签: node.js selenium-webdriver automation jasmine protractor

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

例如,查看下面的测试用例,一个测试步骤是捕获屏幕截图 仅适用于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
    }
}

1 个答案:

答案 0 :(得分:2)

我相信您希望在takeScreenshot()之后运行单个函数,这会将屏幕截图保存到不同的文件,具体取决于正在运行的浏览器。是吗?

如果是这样,您可以在Protractor中查询浏览器名称(请参阅Get the current browser name in Protractor test)。您可以按照说明使用名称修补“浏览器”(使其更易于访问),或按需获取名称。使用它来命名您的文件将如下所示:

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或确保使用承诺告诉Protractor等到您的屏幕截图被写入。 (解决完成处理程序中的promise。)