использование watir/cucumber/ruby для тестирования веб-страницы. Проблема в том, что некоторые поля не могут быть расположены без javascript.
Это часть страницы, которую я хочу сопоставить:
<!-- 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
.
Теперь вы спросите, почему бы не выбрать элемент по идентификатору. Это потому, что это таблица полей ввода пар ключ/значение. И я хочу отредактировать значение, используя значение key
в качестве параметра. Я не хочу хранить отдельный код для каждой необходимой комбинации.
Вопрос: есть ли способ выбрать элемент, только указав значение ключа XYZ
с помощью селекторов watir. т.е. что поставить вместо ???
внизу?
browser.element(???)
Обновление: вот подход с использованием 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
%Q%*[@value="XYZ"]%
верен. Я считаю, что это должно быть%Q%//*[@value="XYZ"]%
. Хотя я не верю, что это корень вашей проблемы. - person Justin Ko   schedule 06.09.2016