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

        }
}

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


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.


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.


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

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

2

Anda hanya perlu meneruskan nilainya dan memasukkan kunci:

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

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

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

0
 var select = new SelectElement(elementX);
 select.MoveToElement(elementX).Build().Perform();

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

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

Bekerja dengan pilihan dropdownlist
james
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.