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
}
}
ドロップダウンリストから選択要素オブジェクトを作成する必要があります。
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");
詳細 こちら
他の方法はこれです:
driver.FindElement(By.XPath(".//*[@id='examp']/form/select[1]/option[3]")).Click();
また、option [x]のインデックスを変更して、選択する要素の数だけxを変更できます。
それが最善の方法であるかどうかはわかりませんが、それがあなたを助けることを願っています。
これにポイントを追加します。 C#プロジェクトにSelenium.NETバインディングをインストールした後、OpenQA.Selenium.Support.UI名前空間が利用できないという問題に遭遇しました。後で、コマンドを実行することで、Selenium WebDriver Support Classesの最新バージョンを簡単にインストールできることがわかりました。
Install-Package Selenium.Support
nuGetパッケージマネージャーコンソールで、またはNuGetマネージャーからSelenium.Supportをインストールします。
テキストを介してオプションを選択するには;
(new SelectElement(driver.FindElement(By.XPath(""))).SelectByText("");
値を使用してオプションを選択するには:
(new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");
値を渡し、キーを入力するだけです:
driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);
これは私にとってどのように機能するかです(IDによる制御とテキストによるオプションの選択):
protected void clickOptionInList(string listControlId, string optionText)
{
driver.FindElement(By.XPath("//select[@id='"+ listControlId + "']/option[contains(.,'"+ optionText +"')]")).Click();
}
つかいます:
clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");
ドロップダウンから項目を選択するための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
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");
}
}
ドロップダウンボックスから選択項目を探している場合は、「インデックスによる選択」メソッドも非常に便利です。
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);
}
var select = new SelectElement(elementX);
select.MoveToElement(elementX).Build().Perform();
var click = (
from sel in select
let value = "College"
select value
);