所以我现在正在编写这个脚本,它将使用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());
是否可以将文本框的值设置为我想要的值?或者这是一个瓶颈?
感谢您的时间和耐心!
答案 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);