验证selenium c#中下拉菜单的所有选项

本文关键字:选项 下拉菜单 selenium 验证 | 更新日期: 2024-09-25 18:32:26

我正在用c#编写selenium Web驱动程序代码。我想验证下拉菜单的所有选项。我正在使用以下代码。但它给了我一个"soc.options.text"的错误。我能知道我哪里错了吗?

SelectElement soc = new SelectElement(driver.FindElement(By.Id("soc_id_look")));
string[] drop = { "x----x", "Ra", "Ma", "sa", "ga", "ta" };
string[] actual = soc.Options.Text;
int n = drop.Length;
for (int i = 0; i < n; i++)
{
Console.Write(" " + drop[i]);
Assert.IsTrue(drop[i].Equals(actual[i]));
}

验证selenium c#中下拉菜单的所有选项

所以我猜您得到了一个错误,因为soc.Options将返回IWebElement集合,因此.Text不可访问。

不管您得到的错误是什么,for循环都可以浓缩为一个LINQ语句:

Assert.IsTrue(drop.All(d => actual.Contains(d)));

http://msdn.microsoft.com/en-us/library/bb548541(v=vs.110).aspx

确定序列的所有元素是否满足条件。

因此,它被翻译为"drop"数组中的每个元素都存在于"actual"数组中吗?如果存在,则返回true,否则返回false

现在,为了修复您遇到的初始错误,您可以再次使用LINQ将其转换为string的集合:

IEnumerable<string> actual = soc.Options.Select(i => i.Text);

http://msdn.microsoft.com/en-us/library/bb548891(v=vs.110).aspx

将序列的每个元素投影到一个新的表单中。

因此,这将变成"获取该集合中的每个IWebElement,获取其.Text属性的值并返回。"因此,我们最终得到一个string的集合。

我们把所有这些放在一起,最终得到:

SelectElement soc = new SelectElement(driver.FindElement(By.Id("soc_id_look")));
string[] drop = { "x----x", "Ra", "Ma", "sa", "ga", "ta" };
IEnumerable<string> actual = soc.Options.Select(i => i.Text);
Assert.IsTrue(drop.All(d => actual.Contains(d)));

但是,请注意,如果出现错误(无论是编译器还是运行时),则应发布完整错误,以及整个堆栈跟踪(如果有)。当有人说"我有错误"时,我们几乎不可能提供帮助,而且我们根本不知道这是什么错误。这只是一个友好的提示,可以帮助您充分利用StackOverflow。

我猜你得到的错误可能是IEnumerable<IWebElement> does not contain a definition for ".Text"的错误。

我认为这会起作用:

IList<IWebElement> options = soc.Options;
Assert.Equals(options.Count, drop.Length);
foreach (IWebElelent option in options)
{
    Console.Write(" " + drop[i]);
    Assert.IsTrue(drop.Contains(option.Text));
}