Selenium WebDriver中使用C#的项目列表

时间:2013-05-29 16:10:53

标签: c# selenium selenium-webdriver

如何在C#中编写相同的代码?

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

3 个答案:

答案 0 :(得分:9)

专门为select HTML元素(即下拉列表)创建了一个类。

OpenQA.Selenium.Support.UI 命名空间内的SelectElement类。

这是select元素的包装,可以轻松访问人们在select元素中使用/交互的常见内容。

您的示例将被翻译成(使用C#3或更高版本,因为我使用的是LINQ):

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元素,并将<{em>> 中的选项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?
    }
}

答案 1 :(得分: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
  }
}

答案 2 :(得分:0)

如果您的SVG数据如下所示:

<div id="content-data" class="col-md-12" style="height:666px;">
  <svg id="pie-draw-488172" width="492" height="616"><g transform="translate(226,318)">
    <text id="pie-text" cursor="default" y="-226" x="241">Compute (227,311)</text> 
    <text id="pie-text" cursor="default" y="-211" x="241">Database (98,005)</text>
    <text id="pie-text" cursor="default" y="-196" x="241">Storage&amp;Content Delivery (69,436)</text>
    <text id="pie-text" cursor="default" y="-181" x="241">Networking (30,874)</text>
    <text id="pie-text" cursor="default" y="-166" x="241">Other (11,273)</text>
  </svg>
</div>

然后使用此

public List<IWebElement> content_data = new List<IWebElement>();  
content_data = driver.FindElement(By.Id("content-data")).FindElements(By.TagName("text")).ToList();