Node.js 如何在Progrator JS中为两个不同的浏览器设置一个测试用例?
我想在两个不同的浏览器上运行相同的测试用例,但它应该为彼此输出另一个结果 例如,查看下面的测试用例,一个测试步骤是捕获屏幕截图 仅适用于Chrome,另一个应仅适用于FireFox 注意测试用例中的注释,我已经复制了我想要为不同浏览器运行的代码块 请帮忙 谢谢 测试用例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; });
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只是把整个东西放在一个函数中,它应该可以正常工作。