私はC#とSelenium WebDriverの両方が初めてです。
ドロップダウンリストでオプションを選択/クリックする方法は知っていますが、その前に問題があります。ドロップダウンリストは動的に生成されるため、各ケースを実行する前に、リストからすべてのオプション/値を取得する必要があります。
ドロップダウンリストからすべての値/オプションを取得する方法を教えてくれる人はいますか?私はIEを使用していますが、C#のSelenium.IE名前空間で値/オプションを取得するメソッドをサポートするクラスが見つかりませんでした。
私の例:リストにはいくつかのタイムゾーンが含まれています:
<TD>
<select name = "time_zone">
<option value "-09:00"><script>timezone.Alaska</script></option>
<option value "+00:00"><script>timezone.England</script></option>
<option value "+02:00"><script>timezone.Greece</script></option>
<option value "+05:30"><script>timezone.India</script></option>
</select>
<TD>
これはIEページのドロップダウンリストであり、動的に生成されたタイムゾーンリストを取得する方法は?
私のコード:
IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
List<IWebElement> options = elem.FindElements(By.TagName("option"));
C#は単にエラーをポップします:「OpenQA.Selenium.IWebElement」タイプを「System.Collections.Generic.List」に暗黙的に変換することはできません。明示的な変換が存在します(キャストを見逃していますか?)。
ありがとう。
WebDriver.Support SelectElementOpenQA.Selenium.Support.UI.Selected名前空間にある名前空間を使用して、選択リストのオプションリストにアクセスしてみてください。
IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
SelectElement selectList = new SelectElement(elem);
IList<IWebElement> options = selectList.Options;
その後、次のようなIWebElementとして各オプションにアクセスできます。
IWebElement firstOption = options[0];
Assert.AreEqual(firstOption.GetAttribute("value"), "-09:00");
Select select = new Select(driver.findElement(By.id("searchDropdownBox")));
select.getOptions();//will get all options as List<WebElement>
必ずWebDriver.Support.dllアセンブリを参照して、OpenQA.Selenium.Support.UI.SelectElementドロップダウンヘルパークラスにアクセスしてください。詳細については、 this thread を参照してください。
編集:このスクリーンショットでは、オプションを問題なく取得できることがわかります。 IE新しいInternetExplorerDriverを作成すると開きますか?
Javaのコードは、ドロップダウンリストのすべてのオプションを取得するためのものです。
WebElement sel = myD.findElement(By.name("dropdown_name"));
List<WebElement> lists = sel.findElements(By.tagName("option"));
for(WebElement element: lists)
{
String var2 = tdElement.getText();
System.out.println(var2);
}
それが誰かに役立つことを願っています。
Selenium.Support
を使用してSelectElement
クラスを使用できます。このクラスには、探しているプロパティ「オプション」があります。Web要素を選択要素に変換する拡張メソッドを作成しました
public static SelectElement AsDropDown(this IWebElement webElement)
{
return new SelectElement(webElement);
}
あなたはこのように使うことができます
var elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
var options = elem.AsDropDown().Options
使用する IList<IWebElement>
の代わりに List<IWebElement>
。
例えば:
IList<IWebElement> options = elem.FindElements(By.TagName("option"));
foreach (IWebElement option in options)
{
Console.WriteLine(option.Text);
}
To get all the dropdown values you can use List.
List<string> lstDropDownValues = new List<string>();
int iValuescount = driver.FindElement(By.Xpath("\html\....\select\option"))
for(int ivalue = 1;ivalue<=iValuescount;ivalue++)
{
string strValue = driver.FindElement(By.Xpath("\html\....\select\option["+ ivalue +"]"));
lstDropDownValues.Add(strValue);
}
WebElement drop_down =driver.findElement(By.id("Category"));
Select se = new Select(drop_down);
for(int i=0 ;i<se.getOptions().size(); i++)
System.out.println(se.getOptions().get(i).getAttribute("value"));
WebElement element = driver.findElement(By.id("inst_state"));
Select s = new Select(element);
List <WebElement> elementcount = s.getOptions();
System.out.println(elementcount.size());
for(int i=0 ;i<elementcount.size();i++)
{
String value = elementcount.get(i).getText();
System.out.println(value);
}
Selenium WebDriver C#でドロップダウンリストのすべてのオプションを取得するには:
SelectElement TimeZoneSelect = new SelectElement(driver.FindElement(By.Name("time_zone")));
IList<IWebElement> ElementCount = TimeZoneSelect.Options;
int ItemSize = ElementCount.Count;
for (int i = 0; i < ItemSize; i++)
{
String ItemValue = ElementCount.ElementAt(i).Text;
Console.WriteLine(ItemValue);
}
これはキャスト例外のようです。結果をリストに変換してみてください、つまりelem.findElements(xx).toList
?