我正在尝试将两个字符串“ globalVariables.EditButton_”和值'i'组合在一起,并将该字符串例如“ globalVariables.EditButton_1”作为变量传递,该变量应引用我们作为全局变量存储的按钮元素。下面是我的代码,但是它不起作用。错误是
“信息:
失败:Button.isDisplayed不是函数堆栈:
TypeError:Button.isDisplayed不是函数“
程式码片段:
it('should show the same data in both Page' , function(){
var RowCount=
globalVariables.tableData_Dashboard.all(by.tagName("tr")).count() -1;
for (var i=1; i < RowCount; ++i){
var Button = 'globalVariables.Edit_Button_'+i;
expect(Button.isDisplayed());
// do something
}
});
在这种情况下,如何添加两个字符串并将其用作变量?
最佳答案
在上面的代码段中,您的globalVariables.tableData_Dashboard.all(by.tagName("tr")).count()
返回promise。因此,当您将它们加在一起时,就向一个int和一个int添加了promise。下一件事看起来很奇怪:var Button = 'globalVariables.Edit_Button_'+i;
不会作为elementFinder进行评估。我同意yong在上面的注释中应使用globalVariables['Edit_Button_'+i];
使用异步/等待
因此,我将使用async / await回答这个问题,并且控制流已关闭。这是在配置文件中设置的SELENIUM_PROMISE_MANAGER: false,
。
it('should show the same data in both Page' , async () => {
const RowCount=
(await globalVariables.tableData_Dashboard.all(by.tagName("tr")).count()) - 1;
for (var i=1; i < RowCount; ++i){
const button = globalVariables['Edit_Button_'+i];
expect(await button.isDisplayed());
// do something
}
});