Selenium webdriver 如何使用FluentAutomation SeleniumWebDriver单击没有id的按钮?
我使用的FluentAutomation库包装了Selenium Web驱动程序调用,因此可以以更具行为性的方式导航站点 只要元素具有id或其他不同的属性,它就可以直接工作:Selenium webdriver 如何使用FluentAutomation SeleniumWebDriver单击没有id的按钮?,selenium-webdriver,fluentautomation,Selenium Webdriver,Fluentautomation,我使用的FluentAutomation库包装了Selenium Web驱动程序调用,因此可以以更具行为性的方式导航站点 只要元素具有id或其他不同的属性,它就可以直接工作: I.Open(Site.BaseUrl); I.WaitUntil(() => I.Expect.Exists("#name-search")); I.Click("#applicationHost a"); 但我需要驱动程序单击由以下XPath表达式标识的按钮: //div[@id='qu
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>
1.
备选案文1的案文
2.
备选案文2的案文
因此,我建议使用XPATH:
btn 1:“//div[@class='valg'][position()=0]/label/span[2]”
btn 2:“//div[@class='valg'][position()=1]/label/span[2]”
或者在CSS选择器中
btn 1:“div.valg:n子(1)标签span.enighet”
btn 2:“div.valg:n子(2)标签span.enighet”
但我看到实际上你的div比你的节目还多。
告诉我发生了什么。也有同样的问题,我使用Selenium IDE为每个元素标识XPATH,然后像这样使用它:
findElement(By.xpath(“//div[@id='thalamusboapp-218829419']/div/div[2]/div[3]/div/div/div[2]/div/span/span”) 你能展示你的3-4行html吗?嗨@e1che,我用一个html摘录更新了这篇文章。嗨@e1che,你的建议奏效了,我可以按照你的建议使用CSS选择器访问元素(不确定为什么div的数量与前面的示例不匹配,我从inspector粘贴了它)。有一件事我还不确定。我无法使用I.Select命令,因为没有“Select”元素。但是在任何一个元素上使用“单击”都不会选择任何内容。无论如何,这是另一个问题。谢谢你的帮助。