使用Selenium CSS选择器获取单选按钮的ID

时间:2011-04-13 11:02:48

标签: c# selenium css-selectors

我只想知道如何获取

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

在Selenium的CSS选择器的帮助下。

2 个答案:

答案 0 :(得分:2)

这是一个比你想象的更困难和有趣的问题。请务必注意,HTML class属性 的值不是唯一的 。因此,很可能(实际上可能)您的HTML页面可能有多个元素,类设置为“class1”。因此,只有当您的单选按钮是具有该类值的网页上的第一个元素时,才能严格选择该类。仅使用您的示例,更安全的定位器表达式

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

这只匹配作为单选按钮的class1元素。它更加具体 - 它正确地避免了碰巧也具有class属性的class1值的先前元素。但它仍然不能令人满意 - 它再次匹配第一个这样的元素。例如,如果您有多组单选按钮,则可以进一步改进。假设您想要此代码片段中 second 组中的第一个单选按钮...

<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");

(有关为Selenium构建CSS配方的更多信息,请参阅Simple-Talk.com上的文章和挂图XPath, CSS, DOM and Selenium: The Rosetta Stone。)

答案 1 :(得分:0)

我会举个例子:

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

以下是文档http://release.seleniumhq.org/selenium-remote-control/0.9.2/doc/dotnet/Selenium.DefaultSelenium.GetAttribute.html

的链接