在C#中使用Selenium Webdriver查找按钮组类中的按钮

时间:2015-04-01 01:00:29

标签: c# selenium selenium-webdriver webdriver

我的最终目标是能够在网页上点击“是”或“否”。

使用fire bug我可以看到Yes和No按钮位于名为“btn-group”的类中

<div class="btn-group btn-group-default answer-toggle" aria-label="..." role="group">
     <button class="btn ng-pristine ng-valid active btn-secondary ng-touched" btn-radio="true" ng-model="consultation.previousSoundVoid" ng-class="{'btn-secondary': consultation.previousSoundVoid}" type="button">
          Yes
     </button>
     <button class="btn ng-pristine ng-untouched ng-valid" btn-radio="false" ng-model="consultation.previousSoundVoid" ng-class="{'btn-secondary': consultation.previousSoundVoid == false}" type="button">
          No
     </button>
</div>

我想我可以通过XPath找到Element,但我正在努力提高我的Selenium技能。

我希望有一种方法可以先找到“btn-group”类,然后以某种方式选择“是”或“否”。

或者能够为“是”和“否”选项创建变量。如果我这样做:

var button = Driver.Instance.FindElements(By.ClassName("btn"));

它返回21个选项。我发现:

button[15].Text     returns "Yes"
button[16].Text     returns "No"

不是必须查看所有21个结果并担心索引是否发生变化,我能否以某种方式按文本搜索结果?

3 个答案:

答案 0 :(得分:5)

最好的方法是使用textxpath识别这些元素,因为它们没有任何唯一ID

//button[.='Yes']

不顾一切地使用cssSelector

.btn.ng-pristine.ng-valid.active.btn-secondary.ng-touched

因为它是复合类

您也可以使用css

转到nth-child()
[role='group']>button:nth-child(1)

2会让您选择带有文字No

的按钮

答案 1 :(得分:3)

案例1: answer-toggle 在HTML页面中是唯一的

Driver.Instance.FindElements(By.XPath("//div[contains(@class,'answer-toggle')]//button[contains(text(),'Yes')]")).Click();

这将首先找到一个在其类名中包含 answer-toggle 的div,然后找到一个按钮,其中包含

案例2: answer-toggle 在您的HTML页面中不是唯一的,您可以使用完整的类名,如下所示

Driver.Instance.FindElements(By.XPath("//div[@class='btn-group btn-group-default answer-toggle']//button[contains(text(),'Yes')]")).Click();

Driver.Instance.FindElements(By.XPath("//div[@class,'btn-group btn-group-default answer-toggle']//button[contains(text(),'Yes')]")).Click();

案例3:如果您的HTML页面中只有一个按钮,其中包含文字&#34;是&#34;

Driver.Instance.FindElements(By.XPath("//button[contains(text(),'Yes')]")).Click();

同样适用于按钮。您只需将替换为

答案 2 :(得分:2)

定位按钮肯定有多种选择,但我认为answer-toggle类听起来是件好事:

var buttons = Driver.Instance.FindElements(By.CssSelector("div.answer-toggle button.btn"));