Adding global variables via a require Common Funct

2019-08-29 04:50发布

I am doing a POC on switching to Protractor and Jasmine to perform our automated scripting. I'm trying to build a preliminary framework, but I'm having issues trying to translate my concept to reality.

I've set up three files: conf.js, spec.js, and cf.js. Conf.js is testplan-specific configuration file, spec.js contains the actual tests, and cf.js contains the common functions that I will be using through all test plans. I am trying to include a variable in cf.js to contain the starting URL to be used in the browser.get call. So far, I have not been able to get that to work. I've tried declaring it in cf.js before the //commonfunctions// function declaration, as well as within the function itself. What is the proper way to do this?

cf.js

    var commonfunctions = function () {
      global.StartPage = 'http://google.com/';
      this.ccClick = function (clickElement) {
        browser.wait(protractor.ExpectedConditions.visibilityOf(clickElement),
         this.defaultWait);



  browser.wait(protractor.ExpectedConditions.elementToBeClickable(clickElement),
     this.defaultWait);
        clickElement.click();
    };
    // Common text search
      this.ConfirmText = function(testElement, compareString) {
        browser.wait(protractor.ExpectedConditions.visibilityOf(testElement), 
10000);
        expect(testElement.getText()).toEqual(compareString);
      };
    };
    module.exports = new commonfunctions();

spec.js

  beforeEach(function() {
    browser.waitForAngularEnabled(false);
    browser.get(commonfunctions.StartPage);
  });

Right now, it does not navigate to the webpage.

3条回答
迷人小祖宗
2楼-- · 2019-08-29 05:21

Your made a mistake at following code:

// cf.js
var commonfunctions = function () {
      global.StartPage = 'http://google.com/';

// spec.js
beforeEach(function() {
  browser.waitForAngularEnabled(false);
  browser.get(commonfunctions.StartPage);
});

// you define `StartPage` to a global variable, not a property of `commonfunctions`, 
thus you shouldn't refer it from `commonfunctions`, but from `global` as following:

browser.get(global.StartPage)

or you define StartPage to be a property of commonfunctions

// cf.js
var commonfunctions = function () {
   this.StartPage = 'http://google.com/';
   // use `this` at here, rather than `global`

// spec.js
beforeEach(function() {
  browser.waitForAngularEnabled(false);
  browser.get(commonfunctions.StartPage);
});
查看更多
Anthone
3楼-- · 2019-08-29 05:24

Add the below one to your config.js

baseUrl: 'http://google.com/',

To use it in your test as below

browser.get(browser.baseUrl);

Hope this helps you

查看更多
混吃等死
4楼-- · 2019-08-29 05:28

This should be possible, I have posted a similar answer before but let me know if you have further concerns about the approach. The approach I took was to require the common function file in the onPrepare as a global variable. This way anything exported from the file is accessible throughout all the tests.

Storing global variable in a separate file for Protractor Tests

查看更多
登录 后发表回答