2013-09-24 22 views
0

所以我目前正在寫這個腳本會自動使用C#中的硒Internet Explorer的驅動簡單,單調的任務。使用C#中硒IE司機迅速發佈大量的文本(10000行)

一切都很正常,但在腳本一個點一個稍微有點慢,我想知道是否有可用更快的方式做我想做的。

問題的關鍵是,當我必須填寫了大量的信息文本框。這個文本框有時會填充10000行,每行不超過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

我們說話有多大? 200,000多行? 100行? 3000 *字符*?如果你可以量化「大」,這將是有用的。這是什麼瀏覽器?使用不同的幫助嗎? – Arran

+1

這是在IE中。我們正在談論1000到10000行。每行的長度不超過20個字符。 –

+0

您可以使用javascript和IJavaScriptExecutor來設置字段。據我所知,SendKeys每次發送一個字符。使用javascript來設置textarea的值應該快得多。 – Richard

回答

1

所以正如理查德建議 - 我結束了使用IJavaScriptExecutor

確切的解決方案是將調用替換到SendKeys在下面的代碼行:

inputTextBox.SendKeys(stringBuilder.ToString()); 

有了這行代碼:

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

鑄造我InternetExplorerDriver對象在IJavaScriptExecutor接口爲了達到顯式實現的接口成員ExecuteScript,然後用上面的參數對該成員進行調用的技巧。

0

要避免使用的SendKeys,您可以使用IJavaScriptExecutor直接設置值。沿着這些線:

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