我想将下拉列表中检索到的文本与期望的文本进行比较。 我不确定如何执行此操作,因为我是黄瓜框架量角器的新手。需要一些帮助!
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'+ '');
}
}
});
答案 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])
}
});
注意:仅当下拉列表中的文本顺序与您使用的数组相同时,此方法才有效。