1) использовать by.cssContainingText()
:
var bigBoss = element(by.cssContainingText('p.group-name-text', 'Big Boss'));
// then you can call click(), getText(), getAttribute('') on found element as following:
bigBoss.click();
2) использовать elements.filter()
:
var bigBoss = element.all(by.css('p.group-name-text'))
.filter(function(it){
return it.getText().then(function(txt){
console.log('txt: ' + txt);
return txt === 'Big Boss' || txt.includes('Big Boss');
});
})
.first();
3) использовать await
с комбинацией if/else
var allNames = element.all(by.css('p.group-name-text'));
var length = await allNames.count();
var matchedIndex = -1;
for(var i=0;i<length;i++) {
var name = await allNames.get(i).getText();
if (name === 'Big Boss' || name.includes('Big Boss')) {
matchedIndex = i;
console.log('matchedIndex = ' + matchedIndex);
break;
}
}
var bigBoss = allNames.get(matchedIndex);
Мы можем реализовать вариант 3, не используя await
, но код будет не легко читаемым и более сложным, чем текущий.
К вашему сведению, если вы хотите использовать await/async
, вам нужно отключить управление обещаниями транспортира (известное как поток управления).Вы не можете использовать оба в своем коде одновременно.