2013-03-20 3 views
17

Я не могу выбрать параметры в выпадающем списке. Я думаю, что мне нужно иметь .Select или SelectElement, но такой опции нет.Выберите каждый вариант в раскрывающемся списке, используя 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"); 
} 

"Select" в "ffbrowser.select" сообщается как ошибка:

Error 1 'OpenQA.Selenium.IWebDriver' не содержит определение для " выберите»и ни один из методов расширения„выберите вариант“принятие первого аргумента типа„OpenQA.Selenium.IWebDriver“может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?)

Мои ссылки проекта включают Selenium.WebDriverBackedSelenium, Thoughtworks.Selenium.Core, WebDriver, WebDriver.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 Intellisense – MethodMan

+0

с использованием Selenium IDE, он говорит, что должен быть выбран вариант, но он недоступен в визуальной студии intellisense. –

+1

У вас есть FirefoxDriver, поэтому я предполагаю, что вы используете Selenium WebDriver, а не IDE. – Nashibukasan

ответ

26

В зависимости какая версия Selenium WebDriver вы используете вы можете использовать SelectElement класс, который будет включен в OpenQA.Selenium.Support.UI.
Например:

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

Где элемент Ваши выпадающий список.

+0

Это сделало трюк для меня. Благодарю. – 2014-07-01 14:18:49

+4

Не забудьте «install-package selenium.support» –

+0

@ChrisS Почему сложно найти эту подсказку. –

1

Вот пример, чтобы лучше проиллюстрировать, как получить все элементы в выпадающем списке и выбрать элемент из выпадающего списка.

код Html образец для выпадающего списка

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

Код ниже получает все элементы из выпадающего списка выше и выбирает пункт «Coffee'.Logic кода выглядит следующим образом

Шаг 1. Создайте интерфейс веб-тега элемента Шаг 2. Создайте IList со всех дочерних элементов веб-тега элемента Шаг 3. Выберите элемент списка Drop «Кофе»

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(); 
     } 
    } 
} 
+0

Это кажется чрезмерно сложным по сравнению с использованием класса SelectElement. Кроме того, в некоторых случаях я обнаружил, что если список уже не расширен, попытка «щелкнуть» параметр оставляет щелчок в пробеле ниже раскрывающегося списка, который ничего не выбирает. – Nashibukasan

+0

Да Класс SelectElement является прямым для всех операций выбора. Однако, если вы хотите перекрестно проверить содержимое в списке DropDown с вашими тестовыми данными, прежде чем даже начать выполнять операции выбора, я думаю, что это хорошо работает. – CheryJose

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

Где элемент - это раскрывающееся окно.

Смежные вопросы