Selenium WebDriver C # kullanarak açılır menüden bir seçenek nasıl seçilir?


87

Bir seçenek belirleyerek web testim için deniyordum. Burada bir örnek bulunabilir: http://www.tizag.com/phpT/examples/formex.php

Bir seçenek bölümü seçmek dışında her şey harika çalışıyor. Değere veya etikete göre bir seçenek nasıl seçilir?

Kodum:

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

        }
}

Yanıtlar:


188

Açılır listeden bir seçim öğesi nesnesi oluşturmanız gerekir.

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

Daha fazla bilgi burada


Bir hata var. var selectElement = new SelectElement(education);Olmalı:var selectElement = new SelectElement(element);
Greg Gauthier

52
Bilginize: Select Element'i kullanmak için Selenium WebDriver'dan farklı bir NuGet paketi olan Selenium Webdriver Support paketini eklemeniz gerekir. OpenQA.Selenium.Support.UI ad alanını ekleyin.
James Lawruk

Firefox sürücüsü, selenyum sürüm 2.53.1 ve destek kitaplığı 2.53 kullanıyorum, SelectByText çalışmıyor gibi görünüyor. Tüm seçenekleri görebiliyorum. Seçenekleri yinelesem ve doğru değeri ayarlasa bile, Değer ayarlanmıyor ... Herhangi bir yardım harika olurdu
Viswas Menon

3
Diğer sürücüleri mi denediniz yoksa sadece Firefox mu? Ayrıca, paketin teknik adı şu anda Selenium.Support'tur.
Dan Csharpster

Bu benim için harika çalıştı, Selenium.Support NuGet'i de eklemek zorunda kaldı.
Ray K

13

Buna bir nokta eklemek - C # projesine Selenium.NET bağını yükledikten sonra OpenQA.Selenium.Support.UI ad alanının kullanılamamasıyla ilgili bir sorunla karşılaştım. Daha sonra şu komutu çalıştırarak Selenium WebDriver Destek Sınıflarının en son sürümünü kolayca yükleyebileceğimizi öğrendi:

Install-Package Selenium.Support

NuGet Package Manager Console'da veya NuGet Manager'dan Selenium.Support'u yükleyin.


9

Başka bir yol bu olabilir:

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

ve [x] seçeneğindeki dizini, x'i seçmek istediğiniz eleman sayısına göre değiştirerek değiştirebilirsiniz.

En iyi yol bu mu bilmiyorum ama umarım bu size yardımcı olur.


Bunun her zaman işe yaradığından emin değilim. Birisi bunu bu şekilde yaptı ve işe yaramadı ve sonunda Matthew Lock tarafından önerilen koda geçmek zorunda kaldım
Fractal

3

Metin Yoluyla Bir Seçenek Seçmek İçin;

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

Değer Yoluyla Bir Seçenek Seçmek İçin:

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

3

Açılır Menüden öğe seçmek için Selenium WebDriver C # kodu:

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

Açılır öğeyi seçmenin 3 yolu vardır: i) Metne Göre Seçin ii) Dizine Göre Seçin iii) Değere Göre Seç

Metne Göre Seçin:

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

Dizine Göre Seçin:

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

Değere göre seçin:

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

2

Sadece değeri geçmeniz ve anahtarı girmeniz gerekir:

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

Açılır listenin benzer metinlere sahip birden çok seçenek içermesi durumunda büyük olasılıkla başarısız olacaktır.
Antti

1

Benim için şu şekilde çalışıyor (kimliğe göre kontrolü ve metne göre seçeneği seçerek):

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

kullanım:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");

0

Açılır kutudan herhangi bir seçim arıyorsanız, "indekse göre seç" yöntemini de çok yararlı buluyorum.

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
Lütfen kodunuza bir açıklama ekleyin: neden sorunun cevabı ve onu daha önce verilen cevaplardan farklı kılan nedir?
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");
    }
}

Açılır
james
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.