与列表中的Webdriver元素交互

时间:2013-01-29 01:41:18

标签: c# xpath selenium webdriver selenium-webdriver

现在已经很晚了,我必须在这里找不到简单的东西,但我无法理解。

我正在尝试使用Webdriver自动化表单的用户输入。问题是表单是动态的,有很多自定义字段。在这种情况下,我试图将一个简单的字符串发送到窗体上的所有文本输入框。我想我已经走了一半;我能够使用XPath提取所有文本字段并将它们放入List中。但是,一旦他们在那里,我不确定如何与他们互动。这是我到目前为止的代码:

List<IWebElement> textfields = new List<IWebElement>();

var test = Driver.FindElements(By.XPath("//*[@type='text']"));

foreach (IWebElement fields in test)
{
    textfields.Add(fields);
}

我与WebDriver交互的方式是这样的:

Driver.FindElements(By.XPath(querygoeshere)).SendKeys("test");

但是,列表中的所有内容都是IWebElement ..接下来我该怎么办?我在错误的道路上吗?

2 个答案:

答案 0 :(得分:2)

我不确定C#语法,但这样的方法应该会有所帮助:

List<IWebElement> textfields = new List<IWebElement>();
textfields = Driver.FindElements(By.XPath("//*[@type='text']"));

foreach (IWebElement field in textfields){
    field.SendKeys("test);
}

答案 1 :(得分:1)

请注意,您当前的XPath查询实际上并不会选择所有文本框。它只会选择类型为text的元素 - 只能是输入。

这会遗漏textarea元素。这对你来说可能没问题,但是:

var textBoxes = new List<IWebElement>();
textBoxes = Driver.FindElements(By.CssSelector("input[type='text']"));

foreach (IWebElement textBox in textBoxes)
{
    textBox.SendKeys("test");
}   

要包含textarea元素:

var textBoxes = new List<IWebElement>();
var textAreas = new List<IWebElement>();

textBoxes = Driver.FindElements(By.CssSelector("input[type='text']"));
textAreas = Driver.FindElements(By.CssSelector("textarea"));

textBoxes.AddRange(textAreas);

foreach (IWebElement textBox in textBoxes)
{
    textBox.SendKeys("test");
}   

至少,如果你必须使用XPath,那么明确 - *将搜索所有元素,你只需要input元素 - 所以把它//input[@type='text']。< / p>