Получение элемента в WebDriver, а не по xpath - PullRequest
0 голосов
/ 26 июля 2011

Я использую веб-драйвер для автоматизации тестирования на месте, код которого генерируется автоматически, вероятно, в GWT. Все идентификаторы имеют форму, подобную «x-auto-4009», которая не является надежным способом добраться до элементов. У меня есть страница с чем-то вроде формы. Это как

  Label name    |   <---- Input ---->
  Label name    |   <---- Input ---->
  Label name    |   <---- Input ---->

Каждая новая строка кодируется как новая таблица в html. Можете ли вы сказать мне, что является лучшим способом получить конкретный ввод более общим способом? Я написал метод, который принимает имя метки, а затем находит все элементы по тегу TR. Затем он получает все строки и сканирует их на предмет имени. Если он найден, я нахожу в этой строке элементы с тегами ввода, и это моя цель. Он работает нормально, но требуется некоторое время, чтобы найти все эти элементы и перебрать их. Я не хочу использовать xpath или размещать элементы через эти хрупкие идентификаторы. Можете ли вы порекомендовать мне другой способ сделать это?

Спасибо заранее, С уважением.

Ответы [ 2 ]

2 голосов
/ 28 июня 2012

Если вы не можете использовать xpath, я думаю, что единственный другой способ сделать это - изменить код страницы.

Можно установить эти значения идентификатора GWT, чтобы они имели более четкое и согласованное значение.См .: https://developers.google.com/web-toolkit/doc/latest/DevGuideUiCss#widgets.

Менее привлекательным является вариант присвоения каждому входу атрибута класса или имени, по которому их можно идентифицировать, а затем выполнить поиск By.class() или By.name().

2 голосов
/ 27 июля 2011

Почему не xpath?Это самый прямой способ сделать это.Ваш существующий подход - более медленная альтернатива.

Используйте этот выбор xpath: <label> с текстом, содержащим «имя», затем его родительский <td>, затем его родительский <tr>, затем первый <input>в этой строке:

WebElement input = driver.findElement(By.xpath(
    "//label[contains(text(), '"+name+"')]/../../input"
));

Я не проверял это.Возможно, придется приспособиться к вашей структуре таблицы тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...