Мне нужно проверить, отображается ли и отображается список кнопок на странице. Сначала я собираю все элементы с элементами. 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 будет лучше.
Любая помощь приветствуется.
.each
- это правильный подход, я бы не использовал цикл for для перебора элементов. Ваша проблема - это просто отсутствующая скобка, isDisplayed()
- это функция, поэтому вам просто нужно изменить ваше утверждение, чтобы expect(elm.isDisplayed()).toBe(true);
Кроме того, для чего я должен добавить другое утверждение. Отображение не означает, что элемент обязательно доступен для кликабельности, вам следует рассмотреть возможность добавления проверки для isEnabled().
Вы делаете все правильно. Но у protractor есть метод to ckeck, если элемент кликабель.
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();/
});