Как выбрать элемент, если значение / заголовок содержит текст - PullRequest
0 голосов
/ 20 апреля 2020

Я пытался выяснить, как я могу получить элемент, если значение содержит «6 месяцев». Вот несколько примеров, и, как мы видим, все эти значения имеют слово 6 месяцев, и это другой сценарий ios, конечно, поэтому я не хочу нажимать на все из них, но я привел пример другого типа банка, который мне нужен нажмите

<input type="button" aria-label="AMEX 6 months Extended Payment Plan" title="AMEX 6 months Extended Payment Plan" value="AMEX 6 months Extended Payment Plan" class="pm-button pp-content-btn pm-button-half">

<input type="button" aria-label="DBS IPP 6 months 0%" title="DBS IPP 6 months 0%" value="DBS IPP 6 months 0%" class="pm-button pp-content-btn pm-button-half">

<input type="button" aria-label="UOBSG IPP 6 months 0%" title="UOBSG IPP 6 months 0%" value="UOBSG IPP 6 months 0%" class="pm-button pp-content-btn pm-button-half">

, и мне интересно, можно ли щелкнуть элемент, если значение / заголовок содержит слово «6 месяцев» внутри него?

РЕДАКТИРОВАТЬ: Использование транспортира для тестирования

Ответы [ 3 ]

2 голосов
/ 20 апреля 2020

Этого можно добиться с помощью xpaths с помощью функции содержимого следующим образом:

element(by.xpath('//input[contains(@title,"6 months")]');

Функция содержит очень полезна для поиска элементов, которые содержат определенный текст либо в атрибуте, либо в сам узел.

1 голос
/ 20 апреля 2020

Это именно то, что делает by.cssContainedText (частичное сопоставление текста в сочетании с css)

let elem = element(by.cssContainingText('[style]', '6 months'));

REVISION

1 способ сделать то, что вам нужно , но очень неэффективно ... Вы можете использовать .filter против elementArrayFinder несколько раз, пока не сузите результаты до нужного элемента

Но я бы искал нужный элемент по 2 параметрам

let $elem = (bank, range) => element(by.xpath(`//input[contains(.,"${bank}") and contains(.,"${range}")]`));

Исправьте xpath по мере необходимости. Но по сути он ищет элемент input, который частично соответствует чему-либо (attribute, text et c) с первым параметром И вторым

1 голос
/ 20 апреля 2020

, поскольку вы не можете использовать querySelectorAll, вам может пригодиться эта функция:

, если вы не зависите от имени элемента:

FindByAttributeValue("Attribute-Name", "Attribute-Value");

или если вы do:

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");

и полная реализация функции:

function FindByAttributeValue(attribute, value, element_type){
    element_type = element_type || "*";
    var All = document.getElementsByTagName(element_type);
    for (var i = 0; i < All.length; i++){
        if (All[i].getAttribute(attribute) == value){
            return All[i];
        }
    }
}

полный ответ получен от ЗДЕСЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...