с использованием watir/огурца/рубина для тестирования веб-страницы. Проблема в том, что некоторые поля не могут быть расположены без javascript.watir, получить элемент по значению
Это часть страницы, которую я хочу, чтобы соответствовать:
<!-- ngIf: (!entry.valueIcon) --><div ng-if="(!entry.valueIcon)" class="ng-scope">
<!-- valueAlt when value is not present or is on a separate object key such as valueFrom: { something: 'else' } -->
<!-- ngIf: entry.valueAlt -->
<!-- default value display -->
<!-- ngIf: (!entry.valueAlt) --><input ng-if="(!entry.valueAlt)" type="text" class="form-control ng-valid ng-scope ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-dirty ng-valid-parse ng-touched" ng-class="{ 'key-value-editor-set-focus-value-1006' : $last }" id="key-value-editor-value-1006-0" name="key-value-editor-value-1006-0" ng-attr-placeholder="{{ (!isReadonlyAny) && valuePlaceholder || ''}}" maxlength="" ng-model="entry.value" ng-readonly="isReadonlyAny || isReadonlySome(entry.name) || entry.isReadonly" placeholder=""><!-- end ngIf: (!entry.valueAlt) -->
</div><!-- end ngIf: (!entry.valueIcon) -->
На самом деле в веб-браузере У меня есть введённого значения XYZ
. Но используя xpath
, как browser.element(xpath: %Q%*[@value="XYZ"]%)
не находит элемент. С другой стороны, если я делаю browser.element(id: "key-value-editor-value-1006-0").value
, возвращается правильное значение XYZ
.
Теперь вы бы спросили, почему бы не выбрать элемент по id. Это потому, что это таблица полей ввода пары ключ/значение. И я хочу изменить значение, используя значение key
в качестве параметра. Я не хочу сохранять отдельный код для каждой комбинации, которая необходима.
Вопрос: есть ли способ выбора элемента только путем предоставления значения ключа XYZ
с использованием селекторов watir. то, что вместо ???
?
browser.element(???)
Update: здесь подход с использованием JavaScript, но мне интересно, если то же самое можно сделать с помощью простых Watir селекторов:
browser.browser.execute_script(%Q%var p = new RegExp("^BARBATRON$"); var el = document.getElementsByTagName("input"); for (var i=0; i<el.length; i++) { if (p.test(el[i].value)) return el[i]; }%).click
Я не верю, что XPath '% Q% * [@ value =" XYZ "]%' правильный. Я считаю, что это должно быть '% Q% // * [@ value =" XYZ "]%'. Хотя я не верю, что это корень вашей проблемы. –