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

Posted

技术标签:

【中文标题】如何将检索到的文本与我的预期文本进行比较?【英文标题】:How to compare the retrieved text with my expected text? 【发布时间】:2019-06-14 14:43:21 【问题描述】:

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

  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: expected Object (browser_, then, ...) to equal 'Select training program using Index'

   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'+ '');
  

   
   );

【问题讨论】:

【参考方案1】:

当您声明此函数异步时,我假设您在 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])
    
);

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

【讨论】:

不,您建议的那个不起作用。我收到类似“无法读取未定义的属性'getText'”的错误 我忘记将下拉元素添加为链的第一部分。你能再试一次,让我知道。【参考方案2】:

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

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

【讨论】:

感谢您的建议。我尝试使用 if-else 循环来断言我的预期是否与实际结果不匹配,那么它应该会失败。但是,它不起作用。

以上是关于如何将检索到的文本与我的预期文本进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

将使用 Python 从 Twitter 检索到的数据保存到文本文件中?

我从firebase数据库中检索到的文本没有出现在我的列表视图中

XCTEST - 如何从屏幕截图中提取文本并将其与预期字符串进行比较

Android比较两个声音以进行语音匹配

如何将密码文本与 bcrypt 哈希值进行比较?

如何使用从 TextView 中的 firebaseDB 检索到的标签解析 HTML 文本?没有 WebView [重复]