2013-03-20 135 views
17

我無法在下拉列表中選擇選項。我想我需要有.SelectSelectElement,但是沒有這種選擇。使用Selenium WebDriver在下拉列表中選擇每個選項C#

樣品的編號:

IWebDriver ffbrowser = new FirefoxDriver(); 
ffbrowser.Navigate().GoToUrl("http://www.amazon.com/"); 
ffbrowser.Manage().Window.Maximize(); 

Thread.Sleep(500); 

IWebElement ddl = ffbrowser.FindElement(By.Name("url")); 
int numofitems = ddl.FindElements(By.TagName("option")).Count; 

for (int i = 1; i < numofitems; i++) 
{ 
    ffbrowser.select("TagName = option", "index = i"); 
} 

中 「ffbrowser.select」, 「選擇」 被報告爲錯誤:

錯誤1 'OpenQA.Selenium.IWebDriver' 不包含關於'的定義選擇」沒有擴展方法‘選擇’接受一個類型的第一個參數‘OpenQA.Selenium.IWebDriver’可以找到(是否缺少using指令或程序集引用?)

我的項目引用包括Selenium.WebDriverBackedSeleniumThoughtworks.Selenium.CoreWebDriverWebDriver.Support

,我有

using NUnit.Framework; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.IE; 
using OpenQA.Selenium.Support.UI; 
+0

使用IDE的智能 – MethodMan 2013-03-20 21:37:43

+0

使用硒IDE,它說應該有一個選擇的選擇,但它不是在Visual Studio智能感知可用。 – 2013-03-20 21:57:29

+1

你有一個FirefoxDriver,所以我假設你使用的是Selenium WebDriver而不是IDE。 – Nashibukasan 2013-03-20 22:46:29

回答

26

根據你使用,你可以使用SelectElement類,這將被包含在OpenQA.Selenium.Support.UI什麼硒的webdriver的版本。
例如:

SelectElement selector = new SelectElement(element); 
selector.SelectByIndex(1); 

元素是你的下拉框。

+0

這爲我做了詭計。謝謝。 – 2014-07-01 14:18:49

+4

不要忘了'install-package selenium.support' – 2015-09-21 14:09:06

+0

@ChrisS爲什麼很難找到這個線索。 – 2016-02-24 21:00:08

1

這裏是爲了更好地說明如何獲取在下拉列表中的所有項目,並從下拉列表中選擇一個項目的例子。

爲下拉列表示例HTML代碼

<select> 
    <option>Milk</option> 
    <option>Coffee</option> 
    <option>Tea</option> 
</select> 

以下代碼獲取從下拉列表上方的所有項目,並選擇是項目「的代碼Coffee'.Logic如下

步驟1.創建的Web元素標籤的接口 第2步:使用Web元素標籤的所有子元素 步驟3.選擇下拉列表項「咖啡」

using System; 
using System.Collections.Generic; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.Support.UI; 

namespace SeleniumTests 
{ 
    class DropDownListSelection 
    { 
     static void Main(string[] args) 
     { 
      IWebDriver driver = new FirefoxDriver(); 
      driver.Navigate().GoToUrl("http://DropDownList.html"); 
      IWebElement element = driver.FindElement(By.XPath("//Select")); 
      IList<IWebElement> AllDropDownList = element.FindElements(By.XPath("//option")); 
      int DpListCount = AllDropDownList.Count; 
      for (int i = 0; i < DpListCount; i++) 
      { 
       if (AllDropDownList[i].Text == "Coffee") 
       { 
        AllDropDownList[i].Click(); 
       } 
      } 
      Console.WriteLine(DpListCount); 
      Console.ReadLine(); 
     } 
    } 
} 
創建一個IList
+0

與使用SelectElement類相比,這看起來過於複雜。另外,在某些情況下,我發現如果列表尚未被擴展,試圖「點擊」一個選項會讓您單擊下拉列表下方的空白,該空白不會選擇任何內容。 – Nashibukasan 2013-03-21 21:15:30

+0

是SelectElement類是所有選擇操作中最直接的選擇。但是,如果您想要在測試數據交叉檢查DropDown列表中的內容,甚至在開始執行選擇操作之前,我認爲這個工作正常。 – CheryJose 2013-03-22 01:17:12

1

您還可以使用:

new SelectElement(driver.FindElement(By.Id("")).SelectByText("")); 

或者:

new SelectElement(driver.FindElement(By.Id("")).SelectByValue("")); 
0

使用下面的簡單示例代碼:

String Input="Value to Select"; 
String xPathVal="@["id=Samplexpath"]"; 
IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal)); 
SelectElement dropdown = new SelectElement(TargetElement); 
dropdown.SelectByText(Input.Trim()); 
0

這工作完全...

SelectElement selector = new SelectElement(element); 
selector.SelectByIndex(1); 

元素是你的下拉框。

相關問題