Ich habe folgenden Code, in dem ich Wert für Dropdown auswählen möchte:

   <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>

Wie man mit Selen mit c # umgeht. Ich habe versucht, xpath zu verwenden, aber es löst den Fehler aus.

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

Der obige Code kann den genauen Pfad nicht finden.

1
Lifewithsun 17 Apr. 2018 im 23:51

4 Antworten

Beste Antwort

Zunächst müssen Sie die Dropdown-Liste als Beantwortet von Yong erweitern

Dann müssen Sie auf das Element klicken, indem Sie xpath als Beantwortet von derloopkat verwenden

Hier ist der endgültige Code für die endgültige Ausgabe:

  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();
0
Lifewithsun 18 Apr. 2018 im 05:30

Versuche dies:

// * [enthält (@ class, 'prod-value')] / div / div / ul / li [1] / a

Es gab zwei Probleme mit diesem xpath.

  • prod-value ist nicht die einzige Klasse, die in der ersten Div vorhanden ist
  • Elementindizes basieren auf 1, daher gibt es kein li [0]
2
derloopkat 17 Apr. 2018 im 21:05

@derloopkat mit korrekter Erklärung versehen (+1)

Eine andere einfache Möglichkeit, das Problem zu lösen, besteht darin, Linktext zu verwenden (falls keine "10K Rose Gold" Links mehr vorhanden sind):

driver.FindElement(By.LinkText("10K Rose Gold")).Click();
1
Andersson 17 Apr. 2018 im 21:15

Sie müssen auf das Dropdown-Menü klicken, um die Option zu erweitern, bevor Sie eine Option auswählen können.

// 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();
1
yong 17 Apr. 2018 im 23:01