SendKeys持续时间过长(C#Selenium geckodriver)

时间:2018-04-03 14:12:44

标签: c# selenium firefox geckodriver

我正在尝试使用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.

texttextarea代表一些正确的值,这些值是正确的(元素存在等)

1 个答案:

答案 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);