2011-03-11 9 views
51

Próbowałem do mojego testu sieci wybierając opcję. Przykład można znaleźć tutaj: http://www.tizag.com/phpT/examples/formex.phpJak wybrać opcję z rozwijanego menu za pomocą Selenium WebDriver C#?

Wszystko działa świetnie, z wyjątkiem wybrania części opcji. Jak wybrać opcję według wartości lub według etykiety?

mój kod:

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 

     } 
} 

Odpowiedz

113

Musisz utworzyć elementu wybierz obiekt z listy rozwijanej.

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

Więcej informacji here

+0

działa jak czar, dzięki! to przyspiesza moje testy! – motto

+0

Istnieje błąd. 'var selectElement = new SelectElement (edukacja);' Powinno być: 'var selectElement = new SelectElement (element);' –

+1

@greg thanks, naprawiono że –

7

Innym sposobem może być to jedno:

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

można zmienić indeks w opcji [x] zmienia X przez liczbę elementów, które chcesz Wybierz.

Nie wiem, czy to najlepszy sposób, ale mam nadzieję, że ci pomogę.

1

Jak to działa dla mnie (wybierając kontroli przez ID i opcji przez Text):

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

zastosowanie:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester"); 
0

Wystarczy przekazać wartość i wprowadzić klucz:

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

Prawdopodobnie zawiedzie, jeśli lista zawiera wiele opcji z podobnymi tekstami. – Antti

3

Dodanie punktu do tego. Natknąłem się na problem polegający na tym, że przestrzenie nazw OpenQA.Selenium.Support.UI nie były dostępne po zainstalowaniu wiązania Selenium.NET w projekcie C#. Później okazało się, że możemy łatwo zainstalować najnowszą wersję klas pomocy technicznej Selenium WebDriver, uruchamiając komendę Install-Package Selenium.Support w pakiecie NuGet Package Manager Console.

3

Aby wybrać opcję za pomocą tekstu;

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

aby wybrać opcję poprzez Wartość:

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

Jeśli szukasz byle wyboru z listy rozwijanej, ja też znaleźć „wybierz indeksem” metodę bardzo użyteczną.

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); 
} 
1

Selen WebDriver kod C# dla wybierając pozycję z rozwijana:

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

Istnieją 3 sposoby zaznaczania drop down przedmiot: i) Selekcja według Tekst ii) Selekcja według Indeksu iii) Selekcja według wartości

Selekcja według Tekst:

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

Selekcja według Index:

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

Select przez Wartość:

SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College 
0
var select = new SelectElement(elementX); 
select.MoveToElement(elementX).Build().Perform(); 

    var click = (
     from sel in select 
     let value = "College" 
     select value 
     ); 
+4

Proszę dodać wyjaśnienie do kodu: _why_ jest to odpowiedź na pytanie i co sprawia, że ​​różni się od wcześniej udzielonych odpowiedzi? –

Powiązane problemy