我需要测试页面上的按钮列表是否已显示并启用。首先,我收集所有带有elements.all的元素。
allEmployeeOptions = element.all(by.css('[role=option]'));
然后,我尝试使用.each函数遍历它们并测试它们是否显示(我还将添加isEnabled。)
testAllOptionsClickable(){
//this.actions.click();
browser.sleep(3000);
this.allEmployeeOptions.each(function(elm){
expect(elm.isDisplayed).toBe(true);
});
这似乎不起作用,我对每个元素重复执行了10次“预期功能为真”。
我的最佳猜测是解决循环承诺有困难,但这是我第一次在Protractor中编写这样的循环。也有可能。每种方法都不正确,而for循环会更好。
感谢您的帮助。
答案 0 :(得分:1)
.each
是正确的方法,我不会使用for循环遍历元素。您的问题只是缺少括号,isDisplayed()
是一个函数,因此您只需要将断言更改为expect(elm.isDisplayed()).toBe(true);
此外,我应该添加另一个断言。显示内容并不表示某个元素一定是可单击的,您还应该考虑为isEnabled()添加一个检查。
答案 1 :(得分:0)
您做对了。但是量角器具有确定元素是否可单击的方法。
example:
it('....xxxx.', function() {
elems=$$('.items.item li'); // use your css locator
var EC = protractor.ExpectedConditions;
elems.each(async function(elem){
browser.wait(EC.elementToBeClickable(elem), 5000);
// perform other action
let elmtxt= await elem.getText();
console.log("text: "+elmtxt);
//expect(elem.isDisplayed()).toBe(true); /toBeTruthy();/
});