Selenium WebDriver中使用c#的项目列表
本文关键字:项目 列表 WebDriver Selenium | 更新日期: 2023-09-27 18:15:59
如何在c#中编写相同的代码?
List<WebElement> displayedOptions = driver.FindElements(By.TagName("select"));
for (WebElement option : displayedOptions)
{
if (option.displayed)
{
displayedOptions.Add(option);
}
}
有一个专门为select
HTML元素(即下拉菜单)创建的类。
它是OpenQA.Selenium.Support中的SelectElement类。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
元素,并将 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?
}
}
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
}
}
如果您的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&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();