Bagaimana cara memilih opsi dari drop down menggunakan Selenium WebDriver C #?

87

Saya mencoba untuk pengujian web saya memilih sebuah opsi. Contohnya dapat ditemukan di sini: http://www.tizag.com/phpT/examples/formex.php

Semuanya bekerja dengan baik kecuali memilih bagian opsi. Bagaimana cara memilih opsi berdasarkan nilai atau label?

Kode Saya:

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

        }
}
mirza
sumber

Jawaban:

188

Anda harus membuat objek elemen pilih dari daftar drop-down.

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

Info selengkapnya di sini

Matthew Kelly
sumber
Ada bug. var selectElement = new SelectElement(education);Seharusnya:var selectElement = new SelectElement(element);
Greg Gauthier
52
FYI: Untuk menggunakan Select Element, Anda perlu menyertakan paket Selenium Webdriver Support yang merupakan paket NuGet berbeda dari Selenium WebDriver. Sertakan ruang nama OpenQA.Selenium.Support.UI.
James Lawruk
Saya menggunakan driver firefox, selenium versi 2.53.1 dan pustaka dukungan 2.53, SelectByText tampaknya tidak berfungsi. Saya dapat melihat semua opsi. Bahkan jika saya mengulang opsi dan menetapkan nilai yang benar, Nilainya tidak disetel .. Bantuan apa pun akan sangat bagus
Viswas Menon
3
Apakah Anda mencoba driver lain atau hanya Firefox? Juga, nama teknis paket saat ini adalah Selenium. Dukungan.
Dan Csharpster
Ini bekerja dengan baik untuk saya, harus menambahkan Selenium. Dukung NuGet juga.
Ray K
13

Menambahkan poin ke ini- Saya menemukan masalah bahwa namespace OpenQA.Selenium.Support.UI tidak tersedia setelah menginstal Selenium.NET mengikat ke dalam proyek C #. Belakangan diketahui bahwa kita dapat dengan mudah menginstal versi terbaru dari Selenium WebDriver Support Classes dengan menjalankan perintah:

Install-Package Selenium.Support

di NuGet Package Manager Console, atau instal Selenium. Dukungan dari NuGet Manager.

Ravishankar S
sumber
9

Cara lain bisa dengan yang ini:

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

dan Anda dapat mengubah indeks pada opsi [x] mengubah x dengan jumlah elemen yang ingin Anda pilih.

Saya tidak tahu apakah ini cara terbaik tetapi saya harap itu membantu Anda.

Juan
sumber
Saya tidak yakin ini berhasil sepanjang waktu. Seseorang melakukannya dengan cara ini dan tidak berhasil dan saya akhirnya harus mengubah ke kode ke kode yang disarankan oleh Matthew Lock
Fractal
3

Untuk Memilih Opsi Melalui Teks;

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

Untuk Memilih Opsi melalui Nilai:

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

Kode Selenium WebDriver C # untuk memilih item dari Drop Down:

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

Ada 3 cara untuk memilih item drop-down: i) Select by Text ii) Select by Index iii) Select by Value

Pilih berdasarkan Teks:

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

Pilih berdasarkan Indeks:

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

Pilih berdasarkan Nilai:

SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College
Ripon Al Wasim
sumber
2

Anda hanya perlu meneruskan nilainya dan memasukkan kunci:

driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);
Vineet Patel
sumber
Kemungkinan akan gagal jika dropdown berisi beberapa opsi dengan teks serupa.
Antti
1

Beginilah cara kerjanya untuk saya (memilih kontrol berdasarkan ID dan opsi berdasarkan teks):

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

menggunakan:

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

Jika Anda mencari sembarang pilihan dari kotak drop-down, saya juga menemukan metode "pilih menurut indeks" sangat berguna.

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);
}
pengguna6164019
sumber
0
 var select = new SelectElement(elementX);
 select.MoveToElement(elementX).Build().Perform();

  var click = (
       from sel in select
       let value = "College"
       select value
       );
Code Disciple
sumber
4
Harap tambahkan penjelasan ke kode Anda: mengapa ini merupakan jawaban untuk pertanyaan dan apa yang membuatnya berbeda dari jawaban yang diberikan sebelumnya?
Nander Speerstra
0
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");
    }
}
james
sumber
Bekerja dengan pilihan dropdownlist
james