我正在尝试使用C#中的Selenium for Firefox将密钥(一串1000行)发送到textarea,但是Selenium冻结了一分钟,之后出现错误,但文本显示在textarea上。
这是错误:
远程WebDriver服务器对URL的HTTP请求超时 60秒后
它有什么用?
谢谢,
修改
String text;
IWebElement textarea;
try
{
textarea.Clear();
textarea.SendKeys(text); //Here's where it freezes for 60 seconds.
}
catch(Exception e)
{
//After those 60 seconds, the aforementioned error appears.
}
//And finally, after another 30 seconds, the text appears written on the textarea.
text
和textarea
代表一些正确的值,这些值是正确的(元素存在等)
答案 0 :(得分:1)
发生异常是因为驱动程序在60秒内没有响应,可能是因为SendKeys
模拟所有键的时间超过60秒。
将文字拆分为较小的字符串,并为每个字符串调用SendKeys
:
static IEnumerable<string> ToChunks(string text, int chunkLength) {
for (int i = 0; i < chunkLength; i += chunkLength)
yield return text.Substring(i, Math.Min(chunkLength, text.Length - i));
}
foreach (string chunk in ToChunks(text, 256))
textarea.SendKeys(chunk);
或模拟用户的文本插入(从剪贴板粘贴或删除)。 Selenium不直接支持此用例,因此您必须使用脚本注入:
string JS_INSERT_TEXT = @"
var text = arguments[0];
var target = window.document.activeElement;
if (!target || target.tagName !== 'INPUT' && target.tagName !== 'TEXTAREA')
throw new Error('Expected an <input> or <textarea> as active element');
window.document.execCommand('inserttext', false, text);
";
textarea.Clear();
((IJavaScriptExecutor)driver).ExecuteScript(JS_INSERT_TEXT, text);