Sendkeys不一致地丢弃字母

时间:2013-11-28 05:24:29

标签: java selenium

我正在使用(new Actions(driver).sendKeys(String).perform()向webdriver发送输入。但是,我一直得到不一致的结果。有时String完全发送,有时会丢失一个或另一个字母,即使字符串本身只有几个字符。

我甚至尝试一次发送一个字符串(使用for循环)并且我仍然得到相同的不一致行为 - 它比以前更少掉键,但仍然不是100%准确。

可能的原因是什么,以及如何解决这个问题?

我正在使用Chromedriver,Java / JUnit,键盘布局设置为美国。

1 个答案:

答案 0 :(得分:0)

我仍然不清楚究竟是什么导致了这一点 - 我发现将所有密钥发送到某些extjs组件的失败是不一致的。我不确定这是不是做了一些奇怪的事情或者硒有点片状。我们在制作字符串或调用发送键时没有做任何奇怪的事情(除了额外的等待来检查元素是否已启用并显示)但是它在我们的代码中感觉不像它。

我的解决方案是重复发送密钥,直到它们明显粘住。我已经包装了selenium api,原因有很多,因此对WebElements的所有调用都通过一个名为WrappedElement的类进行路由,该类具有send keys方法:

    public void SendKeys(string text)
    {
        Func<string> errorMessage = () => string.Format("couldn't send keys {0} entered either {1} or {2}", text, Text, Value);

        Action actionToTry = () =>
                                 {
                                     _element.Clear();
                                     RawSendKeys(text);
                                 };

        Wait.RepeatedlyTry(actionToTry, () => Text == text || Value == text, errorMessage);
    }

    public void RawSendKeys(string text)
    {
        _element.SendKeys(text);
    }

wait方法的简化版本如下所示:

    public void RepeatedlyTry(Action actionToTry, Func<bool> completed, Func<string> errorMessage)
    {
        Wait.Until(d =>
                  {
                      actionToTry();
                      return completed();
                  });
    }

Where Where直接调用直到已配置的DefaultWait