我想在两个不同的浏览器上运行相同的测试用例,但它应该相互输出另一个结果。
例如,查看下面的测试用例,一个测试步骤是捕获屏幕截图 仅适用于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
}
}
答案 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。)