1

我正在使用包装 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>
4

2 回答 2

2

所以我可以用 XPATH 建议的是:

按钮 1:"//div[@class='valg'][position() = 0]/label/span[2]"

按钮 2:"//div[@class='valg'][position() = 1]/label/span[2]"

或在 CSS 选择器中

按钮 1:"div.valg:nth-child(1) label span.enighet"

按钮 2:"div.valg:nth-child(2) label span.enighet"

但我看到实际上你的 div 比你展示的要多。告诉我怎么了。

于 2013-04-26T07:30:25.457 回答
0

有同样的问题,我使用 Selenium IDE 来识别每个元素的 XPATH,然后像这样使用它:

driver.findElement(By.xpath("//div[@id='thalamusboapp-218829419']/div/div[2]/div[3]/div/div/div[2]/div/span/span" ));

于 2017-04-28T13:31:38.163 回答