2016-10-19 1 views
0

Ich habe Seite mit vielen Dropdown-Menüs und ich habe ein Problem beim Schreiben etwas generisches anstelle von Hardcoding den vollständigen Pfad.Partial Match Wählen Sie ein Element in Dropdown C#

Die Idee ist, das Land Drop-Down-und Auswählen eines Elements aus der Dropdown-

Das funktioniert

public MyPage WithCountry(string countryValue) 
{ 
    driver 
    .FindElement(By.CssSelector("#ctl00_MainContentPlaceholder_ApplicantDetails1_Panel_ctl00_ctl03_CountryList > span.ui-selectmenu-text")) 
    .Click(); 

    driver.FindElement(By.Id("ui-id-162")).Click(); 
    return this; 
} 

Das funktioniert nicht

public MyPage WithCountry(string countryValue) 
{ 
    var element=driver.FindElement(By.CssSelector("[Id$=ctl03_CountryList]"); 
    element(By.CssSelector("# > span.ui-selectmenu-text")).Click(); //NOT SURE ABOUT THIS GIVES ME ERROR. 
    driver.FindElement(By.Name(countryValue)).Click(); 
    return this; 
} 

html

zu lokalisieren
<ul id="ctl00_MainContentPlaceholder_ucApplicantDetails1_ApplicantPanel_ctl00_ctl03_CountryList" class="form-columns"> 
    <li class="large-4 columns"> 
      <label for="ctl00_MainContentPlaceholder_ucApplicantDetails1_ApplicantPanel_ctl00_ctl03CountryListList" id="ctl00_MainContentPlaceholder_ucApplicantDetails1_ApplicantPanel_ctl00_ctl03_CountryListLblFor">CountryList&nbsp; 
       <span class="req">*</span> 
      </label> 
    </li> 
    <li class="hidden"> 
      <span id="ctl00_MainContentPlaceholder_ucApplicantDetails1_ApplicantPanel_ctl00_ctl03_CountryListReqVal" style="color:Red;display:none;"></span> 
    </li> 
    <li class="large-12 columns"> 
     <select name="ctl00$MainContentPlaceholder$ucApplicantDetails1$ApplicantPanel$ctl00$ctl03$CountryList" id="ctl00_MainContentPlaceholder_ucApplicantDetails1_ApplicantPanel_ctl00_ctl03_CountryList" class="xxx"> 
      <option selected="selected" value=""></option> 
      <option value="Spain">Spain</option> 

Kann jemand irgendwelche Vorschläge geben, wie ich diese Methode Code sollte so, dass ein Element in der Dropdown ausgewählt wird, indem das Element durch partielle Übereinstimmung gefunden

+0

zeigen 'HTML'-Code für die gleiche – Andersson

+0

hinzugefügt html, das betrifft diesen Drop-down – developer9969

+0

Was meinst du eigentlich teilweise übereinstimmen ?? Möchten Sie eine Option aus Dropdown mit teilweisem Text auswählen? –

Antwort

0

Warum Sie nicht einfach den eingebauten in SelectElement verwenden Klasse?

Zum Beispiel habe ich einige Erweiterung Wrapper-Methoden für sie wie:

public static void SelectElementByName(this IWebElement selectDropDown, string valueToSelect) 
{ 
    var selectElement = new SelectElement(selectDropDown); 
    if (selectElement.SelectedOption.Text == valueToSelect) 
    { 
     return; 
    } 
    selectElement.SelectByText(valueToSelect); 
} 

Verbrauch:

var countrySelectElement = driver.FindElement(By.CssSelector("css_selector_here")); 
countrySelectElement.SelectElementByName("Spain"); 

Dann auch SelectElement-Klasse könnten Sie Ihre aktuell ausgewählte Element erhalten, alle Optionen aus das Drop-Down usw. Werfen Sie einen Blick auf die Github Repo für diese: SelectElement

+0

Danke für deine Antwort ein paar Dinge 1) mein cssselector findet nichts [ FindsBy (How = How.CssSelector, Verwendung = "[Id $ = CountryList]")] [CacheLookup] private IWebElement Land; Ich erhalte den Fehler "Message =" Element hätte ausgewählt werden sollen, aber war ul "2) Nicht sicher, was der CSSSelector sein sollte, das ist mein Hauptproblem, dies ist der Ort, wo ich teilweise übereinstimmen möchte. Hoffe alle klar .Alle Ideen – developer9969

+0

Fehlermeldung ist ziemlich selbsterklärend. Sie haben mehrere Elemente, die zu "[Id $ = CountryList]" 'passen, die erste ist die ungeordnete Liste (" ul "-Tag). Von dem von Ihnen geposteten HTML-Snippet haben Sie 4 Elemente die haben ihre ID, die 'CountryList' enthält. Wenn Sie jedoch die von mir angegebene Erweiterungsmethode verwenden, müssen Sie nur den gewünschten SelectTag finden und den gewünschten Wert aus dem Drop-down-Menü auswählen. Ich bin mir nicht sicher, welche mehrere Elemente Sie mit dem von Ihnen bereitgestellten 'CssSelector' identifizieren möchten – Cosmin

+0

Hallo, ich habe die von Ihnen zur Verfügung gestellte Erweiterungsmethode verwendet und nicht funktioniert.Sicherlich könnte ich usi sein falsch.In meinem kleinen Wissen über Selenium finde ich "ein Element, das eine ID hat, die mit" countryList "endet [FindsBy (How = How.CssSelector, Verwenden =" [Id $ = CountryList] ")] [CacheLookup] private IWebElement countryList .Look bei "ID $" das ich dachte, es würde das Element finden und rufen Sie dann Ihre Methode wie diese countryList .SelectElementByName ("Spanien"); – developer9969

Verwandte Themen