常見的下拉列表框如下圖所示:
HTML源碼如下:
<select name="China" id="ChinaProvince">
<option value="">--請(qǐng)選擇區(qū)域--</option>
<option value="pdditrict">浦東新區(qū)</option>
<option value="hpditrict">黃浦區(qū)</option>
<option value="xhditrict">徐匯區(qū)</option>
<option value="cnditrict">長寧區(qū)</option>
<option value="sjditrict">松江區(qū)</option>
</select>
Selenium中SelectElement類結(jié)構(gòu)
使用SelectElement類需引用命名空間OpenQA.Selenium.Support.UI 在標(biāo)準(zhǔn)的Selenium中,選擇下拉列表的類是Select(如Java),但在C#中Select是關(guān)鍵字罢荡。
通過文本選擇列表
通過該方式僅能選中在瀏覽器中看到的選項(xiàng)职车。
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByText("浦東新區(qū)");
在使用SelectElement需要引用命名OpenQA.Selenium.Support.UI 渴庆。在標(biāo)準(zhǔn)的Selenium中家妆,選擇下拉列表的類是Select(比如Java)对省,但在C#中Select是關(guān)鍵字,所以才換了一個(gè)名字额港。
通過Value值選擇列表
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByValue("pdditrict");
通過Index選擇列表
有些時(shí)候,我們并不關(guān)心所選擇的列表是否為我們所要選擇的列表歧焦,只需要確定有列表被選中即可移斩,這時(shí)我們可以使用通過Index來選擇,特別是一些動(dòng)態(tài)生成下拉列表的情況下绢馍,使用Index來選擇是最好的方式向瓷。代碼如下所示:
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByIndex(1);
通過循環(huán)選擇列表
雖然在Selenium中,使用上面幾種方法已經(jīng)可以實(shí)現(xiàn)選擇下拉列表了舰涌。在實(shí)際情況如果需要循環(huán)選擇某些選項(xiàng)猖任,該怎么寫腳本了?詳細(xì)代碼如下:
IWebElement selectElem = driver.FindElement(By.Name("China"));
ReadOnlyCollection<IWebElement> options = driver.FindElements(By.TagName("option"));
//循環(huán)每個(gè)列表選中一次
for (int i = 0; i < options.Count; i++)
{
options[i].Click();
}
//循環(huán)選中一個(gè)列表
for (int i = 0; i < options.Count; i++)
{
if (options[i].Text.Contains("徐匯"))
{
options[i].Click();
}
}
選擇多個(gè)列表選項(xiàng)
下拉列表中不僅支持單選也支持多選瓷耙,多選下拉列表示例如下所示:
HTML源碼如下:
請(qǐng)選擇你向往的城市:<br /><br />
<select name="city" id="city" multiple="multiple" size="10">
<option value="">--請(qǐng)選擇城市--</option>
<option value="shanghai">上海</option>
<option value="nanjing">南京</option>
<option value="wuhan">武漢</option>
<option value="chongqing">重慶</option>
<option value="chengdu">成都</option>
<option value="kunming">昆明</option>
<option value="guilin">桂林</option>
</select>
示例代碼如下:
IWebElement cityEle = driver.FindElement(By.Id("city"));
SelectElement citySelect = new SelectElement(cityEle);
citySelect.SelectByText("上海");
citySelect.SelectByValue("wuhan");
citySelect.SelectByIndex(6);
Assert.AreEqual(3,citySelect.AllSelectedOptions.Count);
最終的運(yùn)行效果如下所示:
清除單個(gè)選中列表
清除所有選擇列表只需要調(diào)用SelectElement類的方法DeselectByText铅协、DeselectByValue、DeselectByIndex方法即可
IWebElement cityEle = driver.FindElement(By.Id("city"));
SelectElement citySelect = new SelectElement(cityEle);
citySelect.SelectByText("上海");
citySelect.SelectByValue("wuhan");
citySelect.SelectByIndex(6);
Assert.AreEqual(3,citySelect.AllSelectedOptions.Count);
citySelect.DeselectByText("上海");
citySelect.DeselectByValue("wuhan");
citySelect.DeselectByIndex(6);
Assert.AreEqual(0, citySelect.AllSelectedOptions.Count);
清除所有選擇列表
清除所有選擇列表只需要調(diào)用SelectElement類的方法DeselectAll方法即可帅腌。
IWebElement cityEle = driver.FindElement(By.Id("city"));
SelectElement citySelect = new SelectElement(cityEle);
citySelect.SelectByText("上海");
citySelect.SelectByValue("wuhan");
citySelect.SelectByIndex(6);
Assert.AreEqual(3,citySelect.AllSelectedOptions.Count);
citySelect.DeselectAll();
Assert.AreEqual(0, citySelect.AllSelectedOptions.Count);
通過選擇項(xiàng)斷言
下拉列表中斷言可以通過SelectElement類中SelectedOption方法來斷言選擇的列表是否正確蹂季,代碼如下:
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByText("浦東新區(qū)");
Assert.AreEqual("浦東新區(qū)", selectObj.SelectedOption.Text);
通過下拉列表Value屬性斷言
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByText("浦東新區(qū)");
Assert.AreEqual("pdditrict", selectObj.SelectedOption.GetAttribute("value"));
多選下拉列表斷言
因多選下拉列表可允許用戶選中多個(gè)選項(xiàng),那么我們可以將用戶選中的項(xiàng)做為一個(gè)集合來對(duì)待落追,然后進(jìn)行斷言盈滴,代碼如下:
IWebElement cityEle = driver.FindElement(By.Id("city"));
SelectElement citySelect = new SelectElement(cityEle);
citySelect.SelectByText("上海");
citySelect.SelectByValue("wuhan");
citySelect.SelectByIndex(6);
IList<IWebElement> selected = citySelect.AllSelectedOptions;
Assert.AreEqual(3, selected.Count);
Assert.AreEqual("上海",selected[0].Text);