尝试从js中的另一个文件调用变量时出错

时间:2018-03-29 09:02:30

标签: javascript protractor

我正在使用页面对象模型。所以每个page.js文件都包含一个变量url和'AddButtonId'。我通过传递pageName和elementID来调用函数来启动页面。

page.js

module.exports = {
    e: {
        url: 'http://localhost:4200/',
        AddButtonId: 'addButton',

},
};

功能定义:

urlCall: function (pageName) {
          return  browser.get(pageName+".e.url");
        },

clickButton: function(pageName,elementID){
             var x = pageName+".e."+elementID;
             element(by.id(x)).click();
            },

这里我在调用函数时传递pageName和ID。

    urlcall(page);

    clickButton(page, AddButtonId);

但是,不是从页面对象文件中获取变量值(http://localhost:4200/),而是浏览器.get()尝试加载“pageName.e.url”。 它不是在“clickButton”函数中传递“addButton”,而是传递“page.e.AddButtonId”并失败并显示错误“NoSuchElementError:找不到使用定位器的元素:By(css selector,* [id =”page.e.AddButtonId “])”

2 个答案:

答案 0 :(得分:1)

我认为您需要使用传入的pageName导入页面对象以获取导入文件路径。

// pageA.js

module.exports = {
    e: {
        url: 'http://localhost:4200/',
    },
    ...
};

// function:urlCall

urlCall: function (pageName) {
  // you need to import the page object.
  var page = require(pageName+'.js');
  var x = page.e.url;
  browser.get(x);
},

// function clickButton

clickButton: function(pageName,elementID){
    var page = require(pageName+'.js');
    var x = page.e[elementID];
    element(by.id(x)).click();
},

// test.js

urlCall('pageA')

答案 1 :(得分:0)

Javascript将您的表达式解析为字符串。相反,您需要使用方括号,如pageName [“e”] [“url”]或适当的属性访问:pageName.e.url