Получить идентификатор радиокнопки с помощью селектора CSS Selenium - PullRequest
0 голосов
/ 13 апреля 2011

Я просто хотел знать, как я могу получить идентификатор

<input type="radio" class="class1" id="radio1" />

с помощью селекторов CSS в Selenium.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Это более сложный и интригующий вопрос, чем вы могли бы предположить.Важно помнить, что значения атрибута HTML class не являются уникальными .Таким образом, вполне возможно (и на самом деле вероятно), что ваша HTML-страница может иметь несколько элементов с классом, установленным в «class1».Поэтому выбор строго по классу будет работать только в том случае, если ваша радио-кнопка - это элемент first на вашей веб-странице с этим значением класса.Работая только с вашим примером, более безопасное выражение локатора будет

selenium.GetAttribute("css=input.class1[type='radio']@id");

Это соответствует только элементам class1, которые являются переключателями.Он гораздо более конкретен - он правильно избегает предыдущих элементов, которые также имеют значение class1 для атрибута class.Но это все еще неудовлетворительно - снова оно будет соответствовать первому такому элементу.Вы можете улучшать дальше, если, например, у вас есть более одной группы переключателей.Скажем, вы хотели первую радиокнопку в второй группе из этого фрагмента кода ...

<div id='group1'>
  <input type="radio" class="class1" id="radio1" />
  ...
</div>
<div id='group2'>
  <input type="radio" class="class1" id="radio1" />
  ...
</div>

... вы можете использовать локатор так:

selenium.GetAttribute("css=#group2 .class1[type='radio']@id");

(Обратите внимание, что пробел после '# group2' важен!)

Однако вышеизложенное в основном объясняет проблему, а не дает хороший ответ, поскольку фундаментальная проблема остается.

Скорее всего, ваш код действительно выглядит примерно так: несколько переключателей имеют одинаковый тип и класс и различаются только по позиции:

<input type="radio" class="class1" id="radio1" />
<input type="radio" class="class1" id="radio2" />
<input type="radio" class="class1" id="radio3" />

Единственный способцель, отличная от первой, - явное индексирование, , но для этого необходимо, чтобы вы знали индекс априори , например:

selenium.GetAttribute("css=#group2 [type='radio']:nth-child(2)@id");

(Подробнее о создании рецептов CSS)см. мою статью и настенную диаграмму XPath, CSS, DOM и Selenium: Rosetta Stone на Simple-Talk.com.)

0 голосов
/ 13 апреля 2011

Я приведу вам пример:

selenium.GetAttribute("css=.class1@id");

Вот ссылка на документацию http://release.seleniumhq.org/selenium-remote-control/0.9.2/doc/dotnet/Selenium.DefaultSelenium.GetAttribute.html

...