验证selenium c#中下拉列表的所有选项

时间:2013-12-14 22:37:10

标签: c# selenium nunit

我在c#中编写selenium webdriver代码。我想验证下拉菜单的所有选项。我使用以下代码。但是它给了'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]));
}

2 个答案:

答案 0 :(得分:2)

所以我猜您收到错误,因为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”数组中的每个元素都存在于“实际”数组中吗?如果是,则返回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"一样。

答案 1 :(得分:0)

我认为这会奏效:

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));
}