99 votes

Comment sélectionner une option dans une liste déroulante en utilisant Selenium WebDriver C# ?

J'essayais pour mon test web de sélectionner une option. Un exemple peut être trouvé ici : http://www.tizag.com/phpT/examples/formex.php

Tout fonctionne parfaitement sauf la partie sélection d'une option. Comment sélectionner une option par valeur ou par étiquette ?

Mon code :

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

        }
}

205voto

Matthew Kelly Points 1131

Vous devez créer un objet élément de sélection dans la liste déroulante.

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

Plus d'informations ici

16voto

Ravishankar S Points 172

J'ai rencontré un problème : l'espace de noms OpenQA.Selenium.Support.UI n'était pas disponible après l'installation du binding Selenium.NET dans le projet C#. Plus tard, j'ai découvert que nous pouvions facilement installer la dernière version de Selenium WebDriver Support Classes en exécutant la commande :

Install-Package Selenium.Support

dans la console NuGet Package Manager, ou installez Selenium.Support depuis NuGet Manager.

10voto

Juan Points 31

L'autre solution pourrait être celle-ci :

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

et vous pouvez modifier l'indice dans option[x] en changeant x par le nombre d'éléments que vous voulez sélectionner.

Je ne sais pas si c'est la meilleure façon, mais j'espère que cela vous aidera.

3voto

Madhu Points 389

Pour sélectionner une option par le biais d'un texte ;

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

Pour sélectionner une option par valeur :

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

3voto

Ripon Al Wasim Points 5161

Code C# Selenium WebDriver pour la sélection d'un élément dans une liste déroulante :

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

Il existe 3 façons de sélectionner un élément de liste déroulante : i) Sélection par texte ii) Sélection par index iii) Sélection par valeur

Sélectionner par texte :

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

Sélectionner par index :

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

Sélectionner par valeur :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X