1

已经很晚了,我必须在这里遗漏一些简单的东西,但我就是想不通。

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

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。接下来我该怎么做?我在这里走错路了吗?

4

2 回答 2

2

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

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

foreach (IWebElement field in textfields){
    field.SendKeys("test);
}
于 2013-01-29T05:59:28.753 回答
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元素——所以 make it //input[@type='text']

于 2013-01-29T10:01:00.447 回答