Транспортир извлекает отдельный элемент из ElementArrayFinder

Я хочу получить первый элемент из ElementArrayFinder, соответствующий условию. Следующий код предоставляет мне ожидаемый элемент, но он проходит через все элементы, что требует времени.

Есть ли способ к этому?

    return content.all(by.css('.class')).filter(function(label){
        return label.getText().then(function(text){
            return text === searchName;
        }); 
    }).first();

ВЫВОД: Ответ, предоставленный Sudharsan Selvaraj, сработал

var ele = content.all(by.xpath(".//*[contains(@class,'class')][normalize-space(text())='some-value']")).first()

Сокращено время поиска элемента

Ответ, предоставленный Florent B. также решает проблему и выглядит как гораздо более простой подход.

return content.element(by.cssContainingText('.class', searchName));

3 ответа

Решение

Вы должны использовать локатор by.cssContainingText найти элемент по CSS и тексту:

return content.element(by.cssContainingText('.class', searchName));

Вы можете использовать xpath, чтобы найти элемент с определенным текстом. Посмотрите ниже пример xpath.

var ele = content.all(by.xpath(".//*[contains(@class,'class')][normalize-space(text())='some-value']")).first()

Почему у вас нет прямого доступа к первому элементу метки?

return content.all(by.css('.class label')).first().getText().then(function (text) {
      return text === searchName;
 });

PS Я не тестировал код, но он, вероятно, должен работать

Другие вопросы по тегам