Работая над тестом автоматизации с использованием codeceptjs / selenium, мне нужно прочитать текст узлов выпадающего списка, не зная, что они будут делать раньше времени, и исключив параметр по умолчанию, выделенный серым (поскольку приложение не будет работать пока не сделан выбор).
<select id="itemname1">
<option class="greydefault">How Many?</option>
<option>6</option>
<option>8</option>
<option>10</option>
<option>12</option>
</select>
<select id="itemname2">
<option class="greydefault">What Type?</option>
<option>a</option>
<option>b</option>
<option>c</option>
<option>d</option>
</select>
Учитывая приведенную выше простую dom, вопрос заключается в том, как написать xpath, который захватит все 4 узла опции, которые содержат 6 8 10 и 12. И еще один xpath, который возвращает все 4 узла опции a b c и d.
Вот мои попытки, которые не работают для меня:
.//option/preceding::option[text()="What Type?"]/following::option[text()="How Many?"]
.//option/following::option[text()="How Many?"]/preceding::option[text()="What Type?"]
.//option/preceding::option[text()="What Type?"] and following::option[text()="How Many?"]
.//option/[preceding::option[text()="What Type?"] and following::option[text()="How Many?"]]
Первые 2 попытки возвращают мне только узел «Сколько», а следующие попытки недействительны.
Выходные данные запроса xpath должны возвращать каждый узел параметра, отличный от узла по умолчанию.
То, что xpath вставлен в функцию, которая читает тексты узлов, выглядит следующим образом:
getElementsText(locator) {
let driver = this.helpers.Protractor.browser;
return driver.element.all(locator).getAttribute("textContent").then((result) => {
return result.toString().split(',');
});
}