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

标签 c# selenium selenium-webdriver

如何在 C# 中编写同一段代码?

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

最佳答案

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

它是 SelectElement OpenQA.Selenium.Support.UI 命名空间中的类。

这是 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 元素,然后将 within 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?
    }
}

关于c# - 使用 C# 的 Selenium WebDriver 中的项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16818950/

相关文章:

perl - 在 Selenium 和 Perl 中使用现有的 Firefox session

selenium - 如果指定了直接节点ip,则IE11测试将运行,但如果指定了网格集线器url,则IE11测试将失败

java - 如何使用 Selenium 和 Java 单击登录按钮/链接 data-testid

java - 查找 'li'元素

c# - 忽略毫秒的 LINQ DateTime 查询

c# - 素数字典

c# - 从没有数据的查询中获取列名

c# - 将字符串返回到自定义对象类型

selenium - 如何实现 HP 质量中心自动化?

javascript - 使用 Protractor 在 Firefox 上下载文件