常見的下拉列表框如下圖所示:
8-2 下拉列表示例_c2i.jpg
HTML源碼如下:
<select name="China" id="ChinaProvince">
<option value="">--請選擇區域--</option>
<option value="pdditrict">浦東新區</option>
<option value="hpditrict">黃浦區</option>
<option value="xhditrict">徐匯區</option>
<option value="cnditrict">長寧區</option>
<option value="sjditrict">松江區</option>
</select>
Selenium中SelectElement類結構
8-1 SelectElement Class.jpg
使用SelectElement類需引用命名空間OpenQA.Selenium.Support.UI 在標準的Selenium中,選擇下拉列表的類是Select(如Java),但在C#中Select是關鍵字。
通過文本選擇列表
通過該方式僅能選中在瀏覽器中看到的選項。
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByText("浦東新區");
在使用SelectElement需要引用命名OpenQA.Selenium.Support.UI 。在標準的Selenium中,選擇下拉列表的類是Select(比如Java),但在C#中Select是關鍵字,所以才換了一個名字。
通過Value值選擇列表
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByValue("pdditrict");
通過Index選擇列表
有些時候,我們并不關心所選擇的列表是否為我們所要選擇的列表,只需要確定有列表被選中即可,這時我們可以使用通過Index來選擇,特別是一些動態生成下拉列表的情況下,使用Index來選擇是最好的方式。代碼如下所示:
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByIndex(1);
通過循環選擇列表
雖然在Selenium中,使用上面幾種方法已經可以實現選擇下拉列表了。在實際情況如果需要循環選擇某些選項,該怎么寫腳本了?詳細代碼如下:
IWebElement selectElem = driver.FindElement(By.Name("China"));
ReadOnlyCollection<IWebElement> options = driver.FindElements(By.TagName("option"));
//循環每個列表選中一次
for (int i = 0; i < options.Count; i++)
{
options[i].Click();
}
//循環選中一個列表
for (int i = 0; i < options.Count; i++)
{
if (options[i].Text.Contains("徐匯"))
{
options[i].Click();
}
}
選擇多個列表選項
下拉列表中不僅支持單選也支持多選,多選下拉列表示例如下所示:
8-3 下列列表多選_c2i.jpg
HTML源碼如下:
請選擇你向往的城市:<br /><br />
<select name="city" id="city" multiple="multiple" size="10">
<option value="">--請選擇城市--</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);
最終的運行效果如下所示:
8-4 多選運行效果_c2i.jpg
清除單個選中列表
清除所有選擇列表只需要調用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);
清除所有選擇列表
清除所有選擇列表只需要調用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);
通過選擇項斷言
下拉列表中斷言可以通過SelectElement類中SelectedOption方法來斷言選擇的列表是否正確,代碼如下:
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByText("浦東新區");
Assert.AreEqual("浦東新區", selectObj.SelectedOption.Text);
通過下拉列表Value屬性斷言
IWebElement selectElem = driver.FindElement(By.Name("China"));
SelectElement selectObj = new SelectElement(selectElem);
selectObj.SelectByText("浦東新區");
Assert.AreEqual("pdditrict", selectObj.SelectedOption.GetAttribute("value"));
多選下拉列表斷言
因多選下拉列表可允許用戶選中多個選項,那么我們可以將用戶選中的項做為一個集合來對待,然后進行斷言,代碼如下:
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);