在C#中使用Selenium IE驱动程序快速发布大量文本(10,000行)

时间:2013-09-24 16:27:48

标签: c# internet-explorer selenium webdriver

所以我现在正在编写这个脚本,它将使用C#中的Selenium Internet Explorer驱动程序自动完成一个简单,单调的任务。

一切都很好,但是在剧本中的某一点上它有点慢,我想知道是否有更快的方法可以做我想要的。

问题在于我必须填写包含大量信息的文本框。此文本框有时会填充多达10,000行,每行不超过20个字符。

但是,以下方法非常慢......

// process sample file using LINQ query
var items = File.ReadAllLines(sampleFile).Select(a => a.Split(',').First());

// Process the items to be what we want to add to the textbox
var stringBuilder = new StringBuilder();
foreach (var item in items)
{
     stringBuilder.Append(item + Environment.NewLine);
}

inputTextBox.SendKeys(stringBuilder.ToString());

是否可以将文本框的值设置为我想要的值?或者这是一个瓶颈?

感谢您的时间和耐心!

2 个答案:

答案 0 :(得分:1)

正如理查德所建议的那样 - 我最终使用了IJavaScriptExecutor

确切的解决方案是在以下代码行中替换对SendKeys的调用:

inputTextBox.SendKeys(stringBuilder.ToString());

使用以下代码:

((IJavaScriptExecutor)ieDriver).ExecuteScript("arguments[0].value = arguments[1]",
                                          inputTextBox, stringBuilder.ToString());

将我的InternetExplorerDriver对象转换为IJavaScriptExecutor接口,以便到达显式实现的接口成员ExecuteScript,然后使用上面的参数调用该成员就可以了。

答案 1 :(得分:0)

为避免使用SendKeys,您可以使用IJavaScriptExecutor直接设置值。这些方面的东西:

string javascript = "document.getElementById("bla").value = stringBuilder";
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver;
js.ExecuteScript(javascript);