我正在尝试将两个字符串“ 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

  }
});

07-24 16:12