Selenium WebDriver C#を使用してドロップダウンからオプションを選択するにはどうすればよいですか?


86

オプションを選択してWebテストを試みていました。例はここにあります: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

        }
}

回答:


184

ドロップダウンリストからselectelementオブジェクトを作成する必要があります。

 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 2011年

バグがあります。var selectElement = new SelectElement(education);する必要があります:var selectElement = new SelectElement(element);
グレッグ・ゴーティエ

51
参考:Select Elementを使用するには、SeleniumWebDriverとは異なるNuGetパッケージであるSeleniumWebdriverSupportパッケージを含める必要があります。名前空間OpenQA.Selenium.Support.UIを含めます。
James Lawruk 2013年

Firefoxドライバー、Seleniumバージョン2.53.1、サポートライブラリ2.53を使用していますが、SelectByTextが機能していないようです。すべてのオプションを表示できません。オプションを繰り返して正しい値を設定しても、値が設定されていません。どんな助けも素晴らしいでしょう
Menon

3
他のドライバーを試しましたか、それともFirefoxだけを試しましたか?また、パッケージの技術名は現在Selenium.Supportです。
DanCsharpster19年

13

これにポイントを追加する-C#プロジェクトにSelenium.NETバインディングをインストールした後、OpenQA.Selenium.Support.UI名前空間が使用できないという問題に遭遇しました。後で、次のコマンドを実行することで、最新バージョンのSeleniumWebDriverサポートクラスを簡単にインストールできることがわかりました。

Install-Package Selenium.Support

NuGetパッケージマネージャーコンソールで、またはNuGetマネージャーからSelenium.Supportをインストールします。


9

他の方法はこれである可能性があります:

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

また、option [x]でインデックスを変更して、選択する要素の数だけxを変更できます。

それが最善の方法かどうかはわかりませんが、それがお役に立てば幸いです。


これが常に機能するかどうかはわかりません。誰かがそれをこのように行なったし、それはうまくいきませんでしたし、私はマシュー・ロックによって提案されたコードにコードに変更になってしまった
フラクタル

3

テキストでオプションを選択するには;

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

値を使用してオプションを選択するには:

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

3

ドロップダウンからアイテムを選択するためのSeleniumWebDriver 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);

ドロップダウンに同様のテキストを持つ複数のオプションが含まれている場合、失敗する可能性があります。
アンティ2015

1

これは私にとってそれがどのように機能するかです(IDによるコントロールとテキストによるオプションの選択):

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 2017

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 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.