如何将检索到的文本与我的预期文本进行比较?

时间:2019-01-21 08:40:26

标签: node.js typescript npm protractor cucumber

我想将下拉列表中检索到的文本与期望的文本进行比较。 我不确定如何执行此操作,因为我是黄瓜框架量角器的新手。需要一些帮助!

  DOM:
  <select id="dropdown1">
  <option value="0" selected="selected">Select training program using 
  Index</option>
  <option value="1">Selenium</option>
  <option value="2">Appium</option>
   <option value="3">UFT/QTP</option>
  <option value="4">Loadrunner</option>
  </select>

我尝试了以下代码,但出现此错误:

AssertionError:预期{对象(浏览器,然后是...)}等于“使用索引选择训练程序”

   Then(/^User clicks the drop down$/, async() => {
   var expected = ['Select training program using Index', 'Selenium', 
   'Appium','UFT/QTP','Loadrunner'];
   var els = element.all(by.id('dropdown1'))
   for (var i = 0; i < expected.length; ++i) {
   expect(els.get(i).getText()).equals(expected[i]); 
   console.log('' +'Steppassed'+ '');
   }
   });

我希望该步骤能够按照我的“预期”通过,并且下拉值相同。


您提供的建议正在起作用,但是当我更改我的预期之一时它将失败。为此,我提供了if-else循环,但始终表明该步骤已通过。在以下示例中已将“ Appium”更改为“ A”。

下面是我的代码。请帮助我进行循环:

 Then(/^User clicks the drop down$/, async() => {
 var expected = ['Select training program using Index', 'Selenium', 
 'A','UFT/QTP','Loadrunner'];
  var els = element.all(by.id('dropdown1'))
  for (var i = 0; i < expected.length; ++i) {
 if(expect(els.get(i).getText()).to.eventually.equals(expected[i])){
 console.log('' +'Steppassed'+ '');
 }else{
 console.log('' +'Stepfailed'+ '');
  }

   }
   });

2 个答案:

答案 0 :(得分:1)

getText()返回一个承诺,所以:

expect(els.get(i).getText()).to.eventually.equals(expected[i]);

答案 1 :(得分:0)

当您声明此功能异步时,我假设您在conf中将SELENIUM_PROMISE_MANAGER设置为false。基于此,您可以使用awaits来简化您的期望语句。

此外,似乎您正在尝试在下拉列表本身上使用element.all,它仅应返回一个元素(下拉列表本身)。我相信您想代替查找下拉列表,然后获取所有选项元素。

Then(/^User clicks the drop down$/, async () => {
    var expected = ['Select training program using Index', 'Selenium',
        'A', 'UFT/QTP', 'Loadrunner'];
    var dropdown = element(by.id('dropdown1'));
    var dropdownOptions = dropdown.all(by.tagName('option'));

    for (var i = 0; i < expected.length; ++i) {
        let optionText = await dropdownOptions[i].getText();
        //second option to try
        //let optionText = await dropdownOptions[i].getAttribute('value');

        expect(optionText).toEqual(expected[i])
    }
});

注意:仅当下拉列表中的文本顺序与您使用的数组相同时,此方法才有效。