7

C# で同じコードを記述する方法は?

List<WebElement> displayedOptions = driver.FindElements(By.TagName("select"));
for (WebElement option : displayedOptions) 
 {
    if (option.displayed) 
    {
        displayedOptions.Add(option);
    }
 }
4

3 に答える 3

10

selectHTML 要素 (つまり、ドロップダウン)用に特別に作成されたクラスがあります。

OpenQA.Selenium.Support.UI名前空間内のSelectElementクラスです。

これは要素のラッパーであり、select要素内で人々が使用/操作する一般的なものに簡単にアクセスできますselect

あなたの例は次のように変換されます(LINQを使用しているため、C#3以上を使用):

IList<IWebElement> selectElements = driver.FindElements(By.TagName("select"));
var displayedSelectElements = selectElements.Where(se => se.Displayed);

このコードが何をするかを知ることは重要です。最初にすべての 要素を見つけselectて、それらを新しいリストに入れます。

select次に、表示されている要素、つまり.Displayedプロパティがtrueである要素のみにフィルターをかけます。これはサンプル コードの直訳です。

ただし、何をしようとしているのかを実際に指定していないため、次の例の方が適していると思います。

var selectElement = new SelectElement(driver.FindElement(By.Id("something")));
var displayedOptions = selectElement.Options.Where(o => o.Displayed);

上記は特定 selectの要素を見つけ、その中のオプションを表示されているものだけにフィルタリングしますselect。繰り返しますが、つまり、.Displayedプロパティをtrueにします。

編集

上記のコードは必要なものですが、ループの形式が必要なためfor、同様のものは次のようになります。

var selectElement = new SelectElement(driver.FindElement(By.Id("something")));
var allOptions = selectElement.Options;

for (int i = 0; i < allOptions.Length; i++)
{
    if (allOptions[i].Displayed)
    {
        // do something
        // like add to a new list?
    }
}
于 2013-05-29T16:33:36.027 に答える
1

FindElements は ReadOnlyCollection を返します。だから定義したほうがいい

ReadOnlyCollection<IWebElement> displayedOptions  = driver.FindElements(By.TagName("select"));

for (WebElement option : displayedOptions) 
{
  if (option.displayed) 
  {
    //displayedOptions.Add(option); //You can't do that
    // do something else
  }
}
于 2016-05-09T08:37:59.150 に答える