2012-03-05 74 views
11

Soy nuevo en C# y en Selenium WebDriver.¿Cómo obtener todas las opciones en una lista desplegable de Selenium WebDriver usando C#?

Sé cómo seleccionar/hacer clic en una opción en una lista desplegable, pero tengo un problema antes de eso. Dado que la lista desplegable se genera dinámicamente, tengo que obtener todas las opciones/valores de la lista antes de ejecutar cada caso.

¿Hay alguien amablemente me diga cómo obtener todos los valores/opciones de una lista desplegable. Estoy usando IE y no encontré ninguna clase que admita el método para obtener valores/opciones en el espacio de nombres Selenium.IE para C#.

Mi ejemplo: Una lista contiene varias zonas horarias:

<TD> 
    <select name = "time_zone"> 
    <option value "-09:00"><script>timezone.Alaska</script></option> 
    <option value "+00:00"><script>timezone.England</script></option> 
    <option value "+02:00"><script>timezone.Greece</script></option> 
    <option value "+05:30"><script>timezone.India</script></option> 
    </select> 
<TD> 

Ésta es una lista desplegable en una página de Internet Explorer y cómo obtener la lista de zonas de tiempo generado dinámicamente?

Mi código:

IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']")); 
List<IWebElement> options = elem.FindElements(By.TagName("option")); 

C# simplemente aparece un error: No se puede implícitamente el tipo encubierta 'OpenQA.Selenium.IWebElement' a 'System.Collections.Generic.List'. Existe una conversión explícita (¿falta un elenco?).

gracias.

Respuesta

6

Asegúrese de hacer referencia al ensamblado WebDriver.Support.dll para obtener acceso a la clase de ayuda desplegable OpenQA.Selenium.Support.UI.SelectElement. Ver this thread para detalles adicionales.

Editar: En esta captura de pantalla, puede ver que puedo obtener las opciones bien. ¿Se está abriendo IE al crear un nuevo InternetExplorerDriver? Screenshot

+0

que ya ha añadido WebDriver.dll y WebDriver.Support.dll en la referencia. –

+0

de todos modos, gracias de todos modos. Todavía estoy buscando soluciones. –

+0

Su código debería funcionar si utiliza tipeo implícito: var options = elem.FindElements (By.TagName ("option")); –

0

Parece ser una excepción de conversión. ¿Puedes intentar convertir el resultado en una lista , es decir elem.findElements (xx) .toList?

+0

Sí, lo intenté de esta manera. Pero cuando imprimí los elementos de la Lista, todos los elementos de la Lista [i] son ​​"OpenQA.Selenium.Remote.RemoteWebElement", que es el tipo pero no el valor. –

+0

Gracias de todos modos. Encontré un método en el espacio de nombres de Selenium llamado "GetSelectOptions", pero no sabía cómo usarlo con la clase IWebElement o InternetExplorerWebDriver. –

11

puede intentar utilizar la WebDriver.Support SelectElement encontrado en OpenQA.Selenium.Support.UI.Selected espacio de nombres para acceder a la lista de opciones de una lista de selección:

IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']")); 

SelectElement selectList = new SelectElement(elem); 
IList<IWebElement> options = selectList.Options; 

Usted puede entonces tener acceso cada opción como un IWebElement, tales como:

IWebElement firstOption = options[0]; 
Assert.AreEqual(firstOption.GetAttribute("value"), "-09:00"); 
1

uso IList<IWebElement> en lugar de List<IWebElement>.

Por ejemplo:

IList<IWebElement> options = elem.FindElements(By.TagName("option")); 
foreach (IWebElement option in options) 
{ 
    Console.WriteLine(option.Text); 
} 
3

Aquí está el código en Java para obtener todas las opciones en la lista desplegable.

WebElement sel = myD.findElement(By.name("dropdown_name")); 
List<WebElement> lists = sel.findElements(By.tagName("option")); 
    for(WebElement element: lists) 
    { 
     String var2 = tdElement.getText(); 
     System.out.println(var2); 
    } 

Espero que pueda ser útil a alguien.

7
Select select = new Select(driver.findElement(By.id("searchDropdownBox"))); 

select.getOptions();//will get all options as List<WebElement> 
0
To get all the dropdown values you can use List. 

List<string> lstDropDownValues = new List<string>(); 
int iValuescount = driver.FindElement(By.Xpath("\html\....\select\option")) 

for(int ivalue = 1;ivalue<=iValuescount;ivalue++) 
{ 
    string strValue = driver.FindElement(By.Xpath("\html\....\select\option["+ ivalue +"]")); 
    lstDropDownValues.Add(strValue); 
} 
0
WebElement drop_down =driver.findElement(By.id("Category")); 
Select se = new Select(drop_down); 
for(int i=0 ;i<se.getOptions().size(); i++) 
System.out.println(se.getOptions().get(i).getAttribute("value")); 
0
WebElement element = driver.findElement(By.id("inst_state")); 
     Select s = new Select(element); 
     List <WebElement> elementcount = s.getOptions(); 

     System.out.println(elementcount.size()); 
     for(int i=0 ;i<elementcount.size();i++) 
     { 
      String value = elementcount.get(i).getText(); 
      System.out.println(value); 

     } 
2

Puede utilizar selenium.Support utilizar la clase SelectElement, esta clase tiene una propiedad "Opciones" que es lo que está buscando, he creado un método de extensión para convertir su elemento web a un elemento de selección

public static SelectElement AsDropDown(this IWebElement webElement) 
{ 
    return new SelectElement(webElement); 
} 

entonces usted podría utilizar de esta manera

var elem = driver.FindElement(By.XPath("//select[@name='time_zone']")); 
var options = elem.AsDropDown().Options 
0

Para obtener todas las opciones de una lista desplegable de selenio WebDriver C#:

SelectElement TimeZoneSelect = new SelectElement(driver.FindElement(By.Name("time_zone"))); 
IList<IWebElement> ElementCount = TimeZoneSelect.Options; 
int ItemSize = ElementCount.Count; 

for (int i = 0; i < ItemSize; i++) 
{ 
    String ItemValue = ElementCount.ElementAt(i).Text; 
    Console.WriteLine(ItemValue); 
} 
Cuestiones relacionadas