Selenium通过XPath获取元素

时间:2018-04-17 20:51:33

标签: c# selenium selenium-webdriver drop-down-menu

我有以下代码,我想为下拉列表选择值:

   <div class="prod-value col-xs-6 col-sm-8">
    <select class="selectpicker show-menu-arrow" data-style="btn-default btn-sm" data-width="98%" data-size="6" onchange="location=options[selectedIndex].value;" style="display: none;"><option value="/design-your-engagement-ring/choose-a-setting/10k-rose-gold-round-halo-engagement-ring/50277-E-10KR">10K Rose Gold</option>
        <option value="aa">10K White Gold</option>
        <option value="bb">10K Yellow Gold</option>
    </select>
    <div class="btn-group bootstrap-select show-menu-arrow" style="width: 98%;">
        <button type="button" class="btn dropdown-toggle selectpicker btn-default btn-sm" data-toggle="dropdown" title="14K White Gold">
        <span class="filter-option pull-left">14K White Gold</span>&nbsp;<span class="caret"></span></button>
        <div class="dropdown-menu open">
            <ul class="dropdown-menu inner selectpicker" role="menu">
                <li data-original-index="0">
                    <a tabindex="0" class="" data-normalized-text="10K Rose Gold"><span class="text">10K Rose Gold</span><span class="glyphicon glyphicon-ok icon-ok check-mark"></span></a>
                </li>
                <li data-original-index="1">
                    <a tabindex="0" class="" data-normalized-text="10K White Gold"><span class="text">10K White Gold</span><span class="glyphicon glyphicon-ok icon-ok check-mark"></span></a>
                </li>
            </ul>
        </div>
    </div>
    <input type="hidden" id="metal_type" name="metal_type" value="14KW">
</div>

如何使用c#进行硒。我尝试过使用xpath,但它会抛出错误。

driver.FindElement(By.XPath("//*[@class='prod-value']/div/div/ul/li[0]/a")).Click();

以上代码无法找到确切的路径。

4 个答案:

答案 0 :(得分:2)

试试这个:

  

<强> // * [含有(@class,&#39; PROD值&#39)] / DIV / DIV / UL /利[1] / A

xpath存在两个问题。

  • prod-value不是第一个div中唯一的类
  • 元素索引是从1开始的,所以没有li [0]

答案 1 :(得分:1)

@derlokkat provided with correct explanation(+1)

另一种解决问题的简单方法是使用链接文本(如果没有"10K Rose Gold"个链接):

driver.FindElement(By.LinkText("10K Rose Gold")).Click();

答案 2 :(得分:1)

您需要先单击下拉列表以展开其选项,然后才能选择任何选项。

// expand dropdown options
driver
  .FindElement(By.Css("div.prod-value button.dropdown-toggle.selectpicker"))
  .click();

// choose option
driver.FindElement(By.LinkText("10K Rose Gold")).Click();

答案 3 :(得分:0)

首先,您需要将下拉列表展开为Answered by Yong

然后,您需要使用xpath作为Answered by derloopkat

单击元素

以下是获得最终输出的最终代码:

  driver.FindElement(By.CssSelector("div.prod-value button.dropdown-toggle.selectpicker")).Click();
  driver.FindElement(By.XPath("//*[contains(@class,'prod-value')]/div/div/ul/li[1]/a")).Click();