我在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]));
}
答案 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));
}