我正在使用包装 Selenium Web 驱动程序调用的 FluentAutomation 库,因此可以以更具行为方式的方式导航该站点。
只要元素具有 id 或其他不同的属性,它就可以直接工作:
I.Open(Site.BaseUrl);
I.WaitUntil(() => I.Expect.Exists("#name-search"));
I.Click("#applicationHost a");
但我需要驱动程序单击使用以下 XPath 表达式标识的按钮:
//div[@id='questions']/div/div/div[4]/label/span[2]
//div[@id='questions']/div/div/div[2]/label/span[2]
等等。至少这是 Selenium IDE 记录器返回的 XPath。但我似乎无法找到引用这些按钮的正确方法。如您所见,唯一的区别是其中一个 div 的索引(div[4]、div[2])。是否有一个通用的约定来引用具有此类 XPath 的元素?
更新:这是来自页面检查器的 HTML 摘录。
<div class="small-12 large-10 columns large-centered" data-bind="foreach: currentQuestion.alternatives">
<div class="valg">
<label data-bind="attr: { for: 'radio-' + $index() }" for="radio-0">
<input type="radio" name="radio-question-40" data-bind="attr: { for: 'radio-' + $index() }, value: value" class="hidden" for="radio-0" value="1">
<span class="enighet" data-bind="text: ($index() + 1)">1</span>
<span class="custom radio" data-bind="click: $parent.pickAnswer, css: { checked: $data.selected }"></span>
<span class="enighet" data-bind="text: text">Text for option 1</span>
</label>
</div>
<div class="valg">
<label data-bind="attr: { for: 'radio-' + $index() }" for="radio-1">
<input type="radio" name="radio-question-40" data-bind="attr: { for: 'radio-' + $index() }, value: value" class="hidden" for="radio-1" value="2">
<span class="enighet" data-bind="text: ($index() + 1)">2</span>
<span class="custom radio" data-bind="click: $parent.pickAnswer, css: { checked: $data.selected }"></span>
<span class="enighet" data-bind="text: text">Text for option 2</span>
</label>
</div>
</div>