Як вибрати параметр зі спадного меню за допомогою Selenium WebDriver C #?


87

Я намагався зробити свій веб-тест, вибравши варіант. Приклад можна знайти тут: http://www.tizag.com/phpT/examples/formex.php

Все працює чудово, крім вибору додаткової частини. Як вибрати варіант за значенням або за міткою?

Мій код:

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

        }
}

Відповіді:


185

Ви повинні створити об'єкт елемента select зі спадного списку.

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

Більше інформації тут


працює як шарм дякую! це пришвидшує мої тести!
mirza

Є помилка. var selectElement = new SelectElement(education);Має бути:var selectElement = new SelectElement(element);
Грег Готьє

52
FYI: Для використання Select Element потрібно включити пакет підтримки Selenium Webdriver, який відрізняється від NuGet, ніж Selenium WebDriver. Включіть простір імен OpenQA.Selenium.Support.UI.
Джеймс Лоурук,

Я використовую драйвер firefox, версію селену 2.53.1 та бібліотеку підтримки 2.53, здається, SelectByText не працює. Я не бачу всіх варіантів. Навіть якщо я повторюю параметри та встановлюю правильне значення, значення не встановлюється .. Будь-яка допомога була б чудовою
Вісвас Менон,

3
Ви пробували інші драйвери чи просто Firefox? Крім того, технічна назва пакету в даний час - Selenium.Support.
Dan Csharpster,

13

Додавши пункт до цього - я зіткнувся з проблемою, через яку простор імен OpenQA.Selenium.Support.UI був недоступний після встановлення прив’язки Selenium.NET до проекту C #. Пізніше з'ясувалося, що ми можемо легко встановити останню версію класів підтримки Selenium WebDriver, запустивши команду:

Install-Package Selenium.Support

в консолі NuGet Package Manager або встановіть Selenium.Support з NuGet Manager.


9

Іншим способом може бути цей:

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

і ви можете змінити індекс в опції [x], змінивши x на кількість елементів, який потрібно вибрати.

Не знаю, чи це найкращий спосіб, але сподіваюся, це допоможе вам.


Я не впевнений, що це працює постійно. Хтось зробив це таким чином, і це не спрацювало, і мені в підсумку довелося змінити код на код, запропонований Метью
Фрактал

3

Вибір варіанту за допомогою тексту;

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

Щоб вибрати варіант за значенням:

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

3

Код Selenium WebDriver C # для вибору елемента зі спадного меню:

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

Є 3 способи вибрати випадаючий елемент: i) Вибір за текстом ii) Вибір за покажчиком iii) Вибір за значенням

Виберіть за текстом:

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

Виберіть за покажчиком:

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

Виберіть за значенням:

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

2

Вам просто потрібно передати значення і ввести ключ:

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

Швидше за все, не вдасться, якщо спадне меню містить кілька варіантів із подібними текстами.
Антті,

1

Ось як це працює у мене (вибір елемента керування за ідентифікатором та варіанту за текстом):

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

використання:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");

0

Якщо ви шукаєте будь-який вибір із випадаючого вікна, я також вважаю дуже корисним метод "вибрати за індексом".

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
Будь ласка, додайте пояснення до свого коду: чому це відповідь на запитання і чим він відрізняється від попередніх відповідей?
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");
    }
}

Працює з виборами зі спадного списку
Джеймс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.