我的最终目标是能够在网页上点击“是”或“否”。
使用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个结果并担心索引是否发生变化,我能否以某种方式按文本搜索结果?
答案 0 :(得分:5)
最好的方法是使用text
和xpath
识别这些元素,因为它们没有任何唯一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"));