Selenium webdriver 如何使用FluentAutomation SeleniumWebDriver单击没有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

我使用的FluentAutomation库包装了Selenium Web驱动程序调用,因此可以以更具行为性的方式导航站点

只要元素具有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>

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”元素。但是在任何一个元素上使用“单击”都不会选择任何内容。无论如何,这是另一个问题。谢谢你的帮助。