我的页面有很多下拉菜单,我似乎在写一些通用的东西而不是硬编码完整路径时遇到了问题。
想法是找到国家/地区下拉列表并从下拉列表中选择一个项目
这项工作
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
<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>
任何人都可以提出任何建议,我应该如何编码这个方法,以便通过部分匹配找到元素来选择下拉列表中的元素
答案 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