Como menciona ZloiAdun, hay una hermosa nueva clase Select en el espacio de nombres OpenQA.Selenium.Support.UI. Esa es una de las mejores formas de acceder a un elemento de selección y sus opciones, ya que su API es muy fácil. Digamos que tienes una página web que se ve algo como esto
<!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>
Eres código para acceder al selecto se vería así. Observe cómo creo el objeto Select pasando un IWebElement normal a su constructor. Usted tiene muchos métodos en el objeto Select. Take a look at the source para obtener más información, hasta que se documente correctamente.
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();
}
}
}
Sin embargo, hay un par de cosas que destacar sobre la clase de Soporte. Incluso si descargó la última versión beta, la DLL de soporte no estará allí. El paquete de soporte tiene una historia relativamente larga en las bibliotecas de Java (que es donde vive PageObject), pero todavía está bastante fresco en el controlador .Net. Afortunadamente, es muy fácil de construir desde la fuente. I pulled from SVN hizo referencia a WebDriver.Common.dll desde la descarga beta y se creó en C# Express 2008. Esta clase no se ha probado tan bien como algunas de las otras clases, pero mi ejemplo funcionó en Internet Explorer y Firefox.
Hay algunas otras cosas que debo señalar en función de su código anterior.En primer lugar la línea que estaba utilizando para encontrar el elemento select
driver.FindElements(By.TagName("select"));
va a encontrar todos los elementos selectos. probablemente deberías usar driver.FindElement
, sin la 's'.
Además, muy raramente usaría INavigation directamente. Hará la mayor parte de su navegación como driver.Navigate().GoToUrl("http://example.com");
Por último, DefaultSelenium
es la forma de acceder a las antiguas aplicaciones de Selenium 1.x. Selenium 2 es una desviación bastante significativa de Selenium 1, por lo que, a menos que intentes migrar pruebas antiguas a la nueva api de Selenium 2 (a menudo referida como la api de WebDriver), no usarás DefaultSelenium.
+1 La clase 'Seleccionar', según lo enlazado por ZloiAdun hizo el trabajo, pero estoy aceptando esta respuesta porque me proporcionó más información. Debido a que 'Seleccionar' aún no está disponible en el dll público, actualmente estoy usando la clase y la excepción vinculada por ZloiAdun. En cuanto a 'FindElements', necesito usar ese porque es más de 1' select' que quiero recuperar. Finalmente, gracias por mencionar el problema con respecto a 'DefaultSelenium', aunque tengo una pregunta para eso; ¿Hay alguna manera de hacer uso de las toneladas de métodos que ofrece 'DefaultSelenium'? –
+1 para aclarar que IWebDriver es el camino a seguir con 2.x. Solo comencé y la mayoría de las demos que pude encontrar usan DefaultSelenium. –