Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var page = new WebPage(), testindex = 0, loadInProgress = false, interval;
- var fs = require('fs');
- var system = require('system');
- var clientUrl = system.args[1],
- clientName = clientUrl.split('//')[1].split('.')[0],
- username = system.args[2],
- password = system.args[3],
- path = system.args[4],
- UserId = system.args[5],
- ReportingToIds = JSON.parse(system.args[6]).toString(),
- ReportId = system.args[9]=="dashboard" ? system.args[9].toString() : system.args[7].toString(),
- ReportName = system.args[8],
- pageName = system.args[10] && system.args[10].toString(),
- clientAlias = system.args[11] && system.args[11].toString(),
- date = system.args[12];
- var logFile = path + '\\output-'+ReportName+'.txt';
- var t0 = performance.now() , t1, moveToNextStep = true, timeLimit = 270000; //<5min, as on backened timeout is 0f 5min
- page.settings.loadImages = false;
- page.settings.clearMemoryCaches = true;
- console.log("system arguments", system.args);
- page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0";//"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";//"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36";
- // to load all react utilities
- page.onInitialized = function () {
- //if (page.injectJs(path + '\\core.js'))// live
- if (page.injectJs('core.js')) // local testing
- {
- console.log("Polyfill loaded");
- }
- }
- page.onLoadStarted = function () {
- loadInProgress = true;
- };
- page.onLoadFinished = function () {
- loadInProgress = false;
- };
- page.onError = function (msg, trace) {
- console.log(msg);
- }
- page.onConsoleMessage = function(msg) {
- console.log(msg);
- };
- page.viewportSize = {
- width: 1200,
- height: 900
- };
- page.paperSize = {
- width: '950px',
- height: '900px',
- margin: {
- top: '10px',
- left: '20px'
- }
- };
- function stopInterval() {
- t1 = performance.now();
- if(t1-t0 > timeLimit){
- //console.log("test complete! after time in ms", (t1-t0));
- clearInterval(interval);
- phantom.exit();
- }
- }
- function holdStep(critera){
- moveToNextStep = true;
- if(ReportId == 'dashboard' && testindex == 4){
- testindex = 8;
- }
- else if(testindex == 5 && ReportId != 'dashboard' && pageName != 'null'){
- testindex = 8;
- }
- else if(critera){
- testindex++;
- }
- }
- var steps = [
- //step 0 check page loaded, by checking login button if exists
- function(){
- var btnLoginLoaded = page.evaluate(function () {
- return (!!document.getElementById("btnLogin"));
- });
- holdStep(btnLoginLoaded);
- },
- //step 1 fill the login credential and click submit
- function() {
- var formFilled = page.evaluate(function (username, password) {
- function setStateEvent(obj, event) {
- var event = new Event(event, { target: obj, bubbles: true });
- return obj ? obj.dispatchEvent(event) : false;
- }
- var userName = document.getElementById("userName");
- userName.value = username;
- setStateEvent(userName, 'input');
- var pass = document.getElementById("password");
- pass.value = password;
- setStateEvent(pass, 'input');
- var chkbox = document.getElementById("rememberMe");
- chkbox.checked = true;
- setStateEvent(chkbox, 'input');
- document.getElementById("btnLogin").click();
- return true;
- }, username, password);
- holdStep(formFilled);
- },
- //step 2 , check if report nav tab exists
- function(){
- var reportTabExist = page.evaluate(function () {
- return (!!document.getElementById('reportLink'));
- })
- holdStep(reportTabExist);
- },
- //step 3, click on report nav tab
- function(){
- page.evaluate(function () {
- document.getElementById('reportLink').click();
- })
- holdStep(true);
- },
- //step 4, check if filter input exists on report panel
- function(){
- var filterReportInputExist = page.evaluate(function () {
- return (!!document.getElementById('filterReportInput'));
- })
- holdStep(filterReportInputExist);
- },
- //step 5, fill filter input and apply filter
- function(){
- var data = {
- ReportingToIds:ReportingToIds , pageName: pageName
- }
- var filterInputFilled = page.evaluate(function (data) {
- function setStateEvent(obj, event) {
- var event = new Event(event, { target: obj, bubbles: true });
- return obj ? obj.dispatchEvent(event) : false;
- }
- var input = document.getElementById('filterReportInput');
- input.value = data.ReportingToIds;
- setStateEvent(input, 'input');
- var pageNameInput = document.getElementById('pageNameInput');
- pageNameInput.value = data.pageName;
- setStateEvent(pageNameInput, 'input');
- document.getElementById("filterReportBtn").click();
- return true;
- }, data);
- holdStep(filterInputFilled);
- },
- //step 6, check if report tab to capture exists
- function(){
- var reportTabExist = page.evaluate(function (ReportId) {
- return(!!document.getElementById(ReportId));
- }, ReportId);
- holdStep(reportTabExist);
- },
- //step 7, click on report tab which is to be captured
- function(){
- page.evaluate(function (ReportId) {
- document.getElementById(ReportId).click();
- }, ReportId);
- holdStep(true);
- },
- //step 8, set width height of report wrapper to whole screen width height
- function(){
- var reportContainer = page.evaluate(function (ReportIdOrDashboard) {
- var id = ReportIdOrDashboard != "dashboard" ? 'report-'+ReportIdOrDashboard:ReportIdOrDashboard;
- var reportWrapper = document.getElementById(id);
- reportWrapper ? reportWrapper.style.height = '100vh':'';
- reportWrapper ? reportWrapper.style.maxHeight = '100vh':'';
- reportWrapper ? reportWrapper.style.width = '100vw':'';
- reportWrapper ? reportWrapper.style.maxWidth = '100vw':'';
- // if(ReportIdOrDashboard != "dashboard" && !!reportWrapper){
- // console.log("id*****************", reportWrapper.getElementsByTagName('iframe')[0].src);
- // reportWrapper.getElementsByTagName('iframe')[0].src = reportWrapper.getElementsByTagName('iframe')[0].src;
- // }
- return (!!reportWrapper);
- }, ReportId);
- holdStep(reportContainer);
- },
- //step 9, hide all elements except report
- function(){
- //dont include https over http, it may not let apply jquery inclusion.
- page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js', function () {
- var element = '#' + (ReportId != "dashboard"?'report-'+ReportId:ReportId );
- (page.evaluate(function (element) {
- $(element).appendTo('body');
- $('body > :not(' + element + ')').hide();
- }, element))
- });
- holdStep(true);
- },
- //step 10, check if report has been loaded by checking attribute "title"
- function(){
- var titleExist = page.evaluate(function (ReportId) {
- var reportWrapper = document.getElementById((ReportId != "dashboard"? 'report-'+ReportId:ReportId));
- return (!!(reportWrapper && reportWrapper.hasAttribute("title")));
- }, ReportId);
- holdStep(titleExist);
- },
- //step 11, capture report after time remaining out of time limit
- function(){
- var timeNow = new Date;
- var time = (timeLimit - t1) > 60000 ? 60000 : (timeLimit - t1); //time post capturing should occur
- //fs.write(logFile, "\r\n-------Client: "+ clientUrl +",UserId: "+UserId+", ReportName: "+ ReportName+", ReportId: "+ ReportId +", Time: " + (timeLimit - t1), 'a');
- setTimeout(function(){
- //local testing
- page.render(path + "/output-" + clientAlias +"-"+ UserId + "-" + ReportId + "-" + pageName + "-" + date + "/" + ReportName+ ".pdf", { format: 'pdf', quality: '100' });
- //live capturing
- //page.render(path + "\\output-" + clientAlias + "-" + UserId + "-" + system.args[7].toString() + "-" + pageName + "-" + date + "\\" + ReportName + ".pdf", { format: 'pdf', quality: '100' });
- phantom.exit();
- }, time);
- holdStep(true);
- }
- ];
- //main code start here......
- page.open(clientUrl, function (status) {
- //window.chrome = Object.assign({},{'name': 'chrome'})
- console.log(status, window.navigator && window.navigator.userAgent, window.chrome);
- if (status == 'success') {
- interval = setInterval(function () {
- stopInterval();
- page.clearMemoryCache();
- if (!loadInProgress && typeof steps[testindex] == "function" && moveToNextStep) {
- t1 = performance.now();
- moveToNextStep = false;
- // console.log("----------------------------------------------------step "+testindex+"-----" + (ReportId), " time taken for nextstep", t1-t0);
- steps[testindex](clientName, username, password);
- }
- else if (typeof steps[testindex] != "function") {
- //console.log("all functions executed");
- stopInterval();
- }
- }, 2000);
- }
- else {
- clearInterval(interval);
- phantom.exit();
- }
- });
Add Comment
Please, Sign In to add comment