部分匹配在下拉列表中选择一个元素c#

时间:2016-10-19 14:26:26

标签: selenium selenium-webdriver

我的页面有很多下拉菜单,我似乎在写一些通用的东西而不是硬编码完整路径时遇到了问题。

想法是找到国家/地区下拉列表并从下拉列表中选择一个项目

这项工作

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

这不起作用

 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

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

任何人都可以提出任何建议,我应该如何编码这个方法,以便通过部分匹配找到元素来选择下拉列表中的元素

1 个答案:

答案 0 :(得分:0)

为什么不使用内置的SelectElement类?

例如,我为它创建了一些扩展包装方法,如:

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

用法:

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

然后,同样使用SelectElement类,您可以获取当前选中的元素,下拉列表中的所有选项等。 看看github repo:SelectElement