Я тестирую веб-приложение с использованием Nightwatch.js, которое использует Selenium WebDriver для взаимодействия с браузером. В моем приложении у меня есть динамически созданный список элементов, дифференцированных только по их именам, а имена отображаются как значения <input>
. Мне нужно найти элемент по его названию.Найти элемент по значению свойства
Пример HTML-представление структуры документа:
<div class="item">
<input> <!-- current value: "first" -->
</div>
<div class="item">
<input> <!-- current value: "second" -->
</div>
<div class="item">
<input> <!-- current value: "first" -->
</div>
мне нужно найти div.item
, содержащий входной сигнал со значением second
.
Обратите внимание, что значение в <input>
определяется значением его value
собственности, которая может отличаться от значения его value
атрибута. В моем случае DOM управляется React, поэтому входы могут не иметь атрибута value
.
Есть ли способ найти элемент по property значение с Nightwatch (или Selenium WebDriver API)?
Я посмотрел на WebDriver documentation и единственный способ, которым я вижу executing пользовательский JavaScript кода, который имеет некоторые серьезные недостатки (например, требует собственной реализации ожидания для элемента появляться и не взаимодействует с NightWatch объектов страницы). Насколько я могу судить, все другие методы связаны только с HTML (так что атрибуты в лучшем случае, а не свойства).
Просто, чтобы быть совершенно ясно, с помощью селекторов, как input[value=...]
(CSS) или //input[@value=...]
(XPath) является не решение, так как он выполняет поиск по значению атрибута, а не значения свойства.
FYI, а не 'nightwatch.js' конкретные, но' protractor' конкретным решением может быть использование недавно введенный [ 'by.js' локатор] (http://www.protractortest.org/ #/апи? смотреть = webdriver.By.js). – alecxe
@alecxe Это интересная информация, но она, похоже, имеет то же удобство, что и Nightwatch/WebDriver [выполнить] (https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidexecute). (Обратите внимание на двусторонний перевод WebElements в/из DOMElements в аргументы и возвращаемое значение.) – hon2a
Да, я боюсь, что нет другого пути, кроме как спуститься к выполнению пользовательских JS. – alecxe