Поиск элементов HTML для использования в Selenium WebDriver - PullRequest
1 голос
/ 15 марта 2012

Использование Selenium WebDriver в классе Java, где я пытаюсь найти этот конкретный элемент, а затем автоматически добавить необходимое количество этого элемента в поле ввода.

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

<tr>
  <td class="non-sortable-table">
    <input class="required text" type="text" value="0" name="plate_order{pageFlow.plateorders[0].numberOfPlates}" tabindex="25">
  </td>
  <td class="non-sortable-table">
    <span>20% - White plates</span>
  </td>
  ...
</tr>

Я пробовал следующее в своем коде Java, чтобы получить этот элемент, но безуспешно:

WebElement element = (WebElement) js.executeScript("return ${\"document.getElementsByName('plate_order{pageFlow.plateorders[0].numberOfPlates}')\"");

WebElement element = driver.findElement(By.ByName('plate_order{pageFlow.plateorders[0].numberOfPlates}'))

как я могу получить этот элемент для редактирования его ввода? Возможно ли, когда части имени элемента являются ссылкой на контроллер, то есть pageFlow?

что если я захочу получить следующий элемент, идентифицированный 20% ....

Я попытался получить его, используя xpath и cssSelector, но безуспешно. Есть предложения?

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Чтобы вернуть элемент из результата JavaScript, вы можете использовать следующий синтаксис (я использовал jQuery как упрощение):

RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return jQuery('input[name^=plate_order]').get(0);");

Вы также можете передать элемент, который был ранее выбран в Selenium:

((JavascriptExecutor) webDriver).executeScript("return doSomethingWithElement(arguments[0]);", webElement);
2 голосов
/ 16 марта 2012

Мне кажется, что вы можете использовать оператор начального типа в XPath или CSS.

Что-то вроде:

XPath: //input[starts-with(@name, 'plate_order')]
CSS: input[name^='plate_order']

Аналогичные вещи должны работать и для диапазона (если вы знаете текст):

XPath: //span[starts-with(., '20%')]
CSS/Sizzle*: span:contains('20%')

Если вы не знаете текст, то этот xpath может сработать.

XPath: //input[starts-with(@name, 'plate_order]/../../td/span

* Функция содержит не чистый CSS. Это дополнение, предоставленное библиотекой Sizzle. Это может или не может работать, в зависимости от того, использует ли Selenium встроенную библиотеку CSS или вводит Sizzle.

...