¿Cómo seleccionar una opción del menú desplegable con Selenium WebDriver C #?

Intentaba para mi examen web seleccionar una opción. Un ejemplo se puede encontrar aquí: http://www.tizag.com/phpT/examples/formex.php

Todo funciona muy bien, excepto la selección de una parte de la opción. ¿Cómo seleccionar una opción por valor o por etiqueta?

Mi código:

using OpenQA.Selenium.Firefox; using OpenQA.Selenium; using System.Collections.ObjectModel; using System.Text.RegularExpressions; using System.Threading; using System.Diagnostics; using System.Runtime.InteropServices; class GoogleSuggest { static void Main() { IWebDriver driver = new FirefoxDriver(); //Notice navigation is slightly different than the Java version //This is because 'get' is a keyword in C# driver.Navigate().GoToUrl("http://www.tizag.com/phpT/examples/formex.php"); IWebElement query = driver.FindElement(By.Name("Fname")); query.SendKeys("John"); driver.FindElement(By.Name("Lname")).SendKeys("Doe"); driver.FindElement(By.XPath("//input[@name='gender' and @value='Male']")).Click(); driver.FindElement(By.XPath("//input[@name='food[]' and @value='Chicken']")).Click(); driver.FindElement(By.Name("quote")).Clear(); driver.FindElement(By.Name("quote")).SendKeys("Be Present!"); driver.FindElement(By.Name("education")).SendKeys(Keys.Down + Keys.Enter); // working but that's not what i was looking for // driver.FindElement(By.XPath("//option[@value='HighSchool']")).Click(); not working // driver.FindElement(By.XPath("/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr/td/div[5]/form/select/option[2]")).Click(); not working // driver.FindElement(By.XPath("id('examp')/x:form/x:select[1]/x:option[2]")).Click(); not working } } 

Debe crear un objeto de elemento de selección de la lista desplegable.

  using OpenQA.Selenium.Support.UI; // select the drop down list var education = driver.FindElement(By.Name("education")); //create select element object var selectElement = new SelectElement(education); //select by value selectElement.SelectByValue("Jr.High"); // select by text selectElement.SelectByText("HighSchool"); 

Más información aquí

Otra forma podría ser esta:

 driver.FindElement(By.XPath(".//*[@id='examp']/form/select[1]/option[3]")).Click(); 

y puede cambiar el índice en la opción [x] cambiando x por la cantidad de elementos que desea seleccionar.

No sé si es la mejor manera, pero espero que te ayuden.

Agregando un punto a esto. Me encontré con un problema que el espacio de nombres OpenQA.Selenium.Support.UI no estaba disponible después de instalar el enlace Selenium.NET en el proyecto C #. Más tarde descubrí que podemos instalar fácilmente la última versión de Selenium WebDriver Support Classes ejecutando el comando Install-Package Selenium.Support en NuGet Package Manager Console.

Para seleccionar una opción a través de texto;

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

Para seleccionar una opción a través del valor:

  (new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue(""); 

Así es como funciona para mí (seleccionando control por ID y opción por texto):

 protected void clickOptionInList(string listControlId, string optionText) { driver.FindElement(By.XPath("//select[@id='"+ listControlId + "']/option[contains(.,'"+ optionText +"')]")).Click(); } 

utilizar:

 clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester"); 

Solo necesita pasar el valor e ingresar la clave:

 driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter); 

Código de Selenium WebDriver C # para seleccionar el elemento del menú desplegable:

 IWebElement EducationDropDownElement = driver.FindElement(By.Name("education")); SelectElement SelectAnEducation = new SelectElement(EducationDropDownElement); 

Hay 3 formas de seleccionar el elemento desplegable: i) Seleccionar por texto ii) Seleccionar por índice iii) Seleccionar por valor

Seleccionar por texto:

 SelectAnEducation.SelectByText("College");//There are 3 items - Jr.High, HighSchool, College 

Seleccionar por índice:

 SelectAnEducation.SelectByIndex(2);//Index starts from 0. so, 0 = Jr.High 1 = HighSchool 2 = College 

Seleccionar por valor:

 SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College 

Si está buscando cualquier selección en el cuadro desplegable, también creo que el método “seleccionar por índice” es muy útil.

 if (IsElementPresent(By.XPath("//select[@id='Q43_0']"))) { new SelectElement(driver.FindElement(By.Id("Q43_0")))**.SelectByIndex(1);** // This is selecting first value of the drop-down list WaitForAjax(); Thread.Sleep(3000); } else { Console.WriteLine("Your comment here); } 
  var select = new SelectElement(elementX); select.MoveToElement(elementX).Build().Perform(); var click = ( from sel in select let value = "College" select value ); 
 IWebElement element = _browserInstance.Driver.FindElement(By.XPath("//Select")); IList AllDropDownList = element.FindElements(By.XPath("//option")); int DpListCount = AllDropDownList.Count; for (int i = 0; i < DpListCount; i++) { if (AllDropDownList[i].Text == "nnnnnnnnnnn") { AllDropDownList[i].Click(); _browserInstance.ScreenCapture("nnnnnnnnnnnnnnnnnnnnnn"); } }