Как упоминает ZloiAdun, в пространстве имен OpenQA.Selenium.Support.UI есть прекрасный новый класс Select.Это один из лучших способов получить доступ к элементу выбора, и его опции, потому что это API-интерфейс очень прост.Допустим, у вас есть веб-страница, которая выглядит примерно так
<!DOCTYPE html>
<head>
<title>Disposable Page</title>
</head>
<body >
<select id="select">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</body>
</html>
Ваш код для доступа к выбору будет выглядеть следующим образом.Обратите внимание, как я создаю объект Select, передавая обычный конструктор IWebElement.У вас есть множество методов для объекта Select. Посмотрите на источник для получения дополнительной информации, пока он не будет должным образом документирован.
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;
using System.Collections.Generic;
using OpenQA.Selenium.IE;
namespace Selenium2
{
class SelectExample
{
public static void Main(string[] args)
{
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("www.example.com");
//note how here's i'm passing in a normal IWebElement to the Select
// constructor
Select select = new Select(driver.FindElement(By.Id("select")));
IList<IWebElement> options = select.GetOptions();
foreach (IWebElement option in options)
{
System.Console.WriteLine(option.Text);
}
select.SelectByValue("audi");
//This is only here so you have time to read the output and
System.Console.ReadLine();
driver.Quit();
}
}
}
Однако следует отметить пару вещей о классе Support.Даже если вы скачали последнюю бета-версию, DLL поддержки не будет там.Пакет поддержки имеет относительно длинную историю в библиотеках Java (именно там живет PageObject), но он все еще довольно свеж в драйвере .Net.К счастью, это действительно легко собрать из исходного кода.Я извлек из SVN , а затем ссылался на WebDriver.Common.dll из бета-версии и встроенного в C # Express 2008. Этот класс не был так хорошо протестирован, как некоторые другие классы, но мой пример работалInternet Explorer и Firefox.
Есть несколько других моментов, на которые я должен обратить внимание, исходя из вашего кода выше.Сначала строка, которую вы использовали, чтобы найти элемент выбора
driver.FindElements(By.TagName("select"));
, будет искать все элементы выбора.вам, вероятно, следует использовать driver.FindElement
, без 's'.
Кроме того, очень редко вы будете использовать INavigation напрямую.Вы будете выполнять большую часть навигации, как driver.Navigate().GoToUrl("http://example.com");
Наконец, DefaultSelenium
- это способ доступа к старому API Selenium 1.x.Selenium 2 является довольно значительным отходом от Selenium 1, поэтому, если вы не пытаетесь перенести старые тесты на новый API Selenium 2 (часто называемый API WebDriver), вы не будете использовать DefaultSelenium.