J'essayais de faire mon test Web en sélectionnant une option. Un exemple peut être trouvé ici: http://www.tizag.com/phpT/examples/formex.php
Tout fonctionne très bien sauf la sélection d'une pièce optionnelle. 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
}
}
var selectElement = new SelectElement(education);
Devrait être:var selectElement = new SelectElement(element);
En ajoutant un point à cela, je suis tombé sur un problème selon lequel l'espace de noms OpenQA.Selenium.Support.UI n'était pas disponible après l'installation de la liaison Selenium.NET dans le projet C #. Plus tard, nous avons découvert que nous pouvions facilement installer la dernière version des classes de support Selenium WebDriver en exécutant la commande:
dans NuGet Package Manager Console ou installez Selenium.Support à partir de NuGet Manager.
la source
Une autre façon pourrait être celle-ci:
driver.FindElement(By.XPath(".//*[@id='examp']/form/select[1]/option[3]")).Click();
et vous pouvez changer l'index dans l'option [x] en changeant x par le nombre d'élément que vous voulez sélectionner.
Je ne sais pas si c'est le meilleur moyen mais j'espère que cela vous aidera.
la source
Pour sélectionner une option par texte;
(new SelectElement(driver.FindElement(By.XPath(""))).SelectByText("");
Pour sélectionner une option via une valeur:
(new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");
la source
Code Selenium WebDriver C # pour sélectionner l'élément dans la 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 déroulant: i) Sélectionner par texte ii) Sélectionner par index iii) Sélectionner par valeur
Sélectionnez par texte:
SelectAnEducation.SelectByText("College");//There are 3 items - Jr.High, HighSchool, College
Sélectionnez par index:
SelectAnEducation.SelectByIndex(2);//Index starts from 0. so, 0 = Jr.High 1 = HighSchool 2 = College
Sélectionnez par valeur:
SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College
la source
Il vous suffit de passer la valeur et d'entrer la clé:
driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);
la source
Voici comment cela fonctionne pour moi (sélection du contrôle par ID et option par texte):
protected void clickOptionInList(string listControlId, string optionText) { driver.FindElement(By.XPath("//select[@id='"+ listControlId + "']/option[contains(.,'"+ optionText +"')]")).Click(); }
utilisation:
clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");
la source
Si vous recherchez n'importe quelle sélection dans la liste déroulante, je trouve également la méthode "sélectionner par index" très utile.
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); }
la source
var select = new SelectElement(elementX); select.MoveToElement(elementX).Build().Perform(); var click = ( from sel in select let value = "College" select value );
la source
IWebElement element = _browserInstance.Driver.FindElement(By.XPath("//Select")); IList<IWebElement> 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"); } }
la source