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

Finding Button within Button Group Class Using Selenium Webdriver in C#

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

使用 fire bug 我可以看到“是”和“否”按钮驻留在一个名为 "btn-group"

的 class 中
<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" class 然后以某种方式在其中选择是或否。

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

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

它returns 21个选项。我发现:

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

不必查看所有 21 个结果并担心索引是否更改,我可以通过某种方式通过文本搜索结果吗?

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

//button[.='Yes']

绝望地使用cssSelector

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

因为它是化合物 class

您也可以选择 nth-child() 和 css

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

2 会让您 select 带有文本 No

的按钮

确实有多个选项可以定位按钮,但我认为 answer-toggle class 听起来不错:

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

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

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

这将首先找到在其 class 名称中包含 answer-toggle 的 div,然后找到 button 有文本 Yes

案例 2:answer-toggle 在您的 HTML 页面中不是唯一的,您可以使用完整的 class 名称作为关注

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 页面中只有一个按钮包含文本 "Yes"

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

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