我正在使用页面对象模型。所以每个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 “])”
答案 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