Java Sendkeys不一致地丢弃字母

Java Sendkeys不一致地丢弃字母,java,selenium,Java,Selenium,我正在使用(新操作(驱动程序)。sendKeys(字符串)。perform())将输入发送到webdriver。但是,我一直得到不一致的结果。有时字符串发送得很完美,有时甚至缺少一个或另一个字母,即使字符串本身只有几个字符 我甚至尝试过一次发送一个字符的字符串(使用for循环),但我仍然得到了同样的不一致行为——它比以前更少地丢弃键,但仍然不是100%准确 可能的原因是什么?如何解决这个问题 我使用的是Chromedriver、Java/JUnit,键盘布局已经设置好了。我还不清楚到底是什么原因

我正在使用
(新操作(驱动程序)。sendKeys(字符串)。perform()
)将输入发送到webdriver。但是,我一直得到不一致的结果。有时字符串发送得很完美,有时甚至缺少一个或另一个字母,即使字符串本身只有几个字符

我甚至尝试过一次发送一个字符的字符串(使用for循环),但我仍然得到了同样的不一致行为——它比以前更少地丢弃键,但仍然不是100%准确

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


我使用的是Chromedriver、Java/JUnit,键盘布局已经设置好了。

我还不清楚到底是什么原因导致了这种情况-我发现无法将所有键发送到一些extjs组件。我不确定这是extjs在做wierd还是selenium有点古怪。我们在制作字符串或calli时没有做任何奇怪的事情ng send键(除了额外的等待来检查元素是否被启用和显示)虽然如此,它感觉不像是我们代码中的东西

我的解决方案是反复发送密钥,直到它们明显粘住为止。出于多种原因,我包装了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);
    }
public void SendKeys(字符串文本)
{
Func errorMessage=()=>string.Format(“无法发送输入了{1}或{2}的键{0}”,文本,文本,值);
Action actionToTry=()=>
{
_元素。Clear();
RawSendKeys(文本);
};
Wait.RepeatedlyTry(actionToTry,()=>Text==Text | | Value==Text,errorMessage);
}
公共无效RawSendKeys(字符串文本)
{
_元素。SendKeys(文本);
}
wait方法的简化版本如下所示:

    public void RepeatedlyTry(Action actionToTry, Func<bool> completed, Func<string> errorMessage)
    {
        Wait.Until(d =>
                  {
                      actionToTry();
                      return completed();
                  });
    }
public void RepeatedlyTry(Action actionToTry,Func completed,Func errorMessage)
{
等待。直到(d=>
{
actionToTry();
返回已完成();
});
}

Where-Until在配置的
DefaultWait

上调用Until,我从未见过这样的情况……您是否在不同的机器上尝试过相同的代码(可能计算机上的某些进程会产生干扰?)有几次-它似乎工作正常,但在我的机器上也不总是出现故障,所以我不能100%确定它是否只是我的机器上的某个东西。但是,如果是的话,什么样的进程会有这种干扰?这很奇怪,你能用FirefoxDriver重现它吗?你能尝试一些不同的键盘布局(英文)?你使用的是什么版本的驱动程序?还有,看看这里:还有…我不知道为什么这会有不同,但是你有没有在不使用操作的情况下尝试过它?这个问题似乎在Firefox中没有出现,只有chrome,正如我所说,只是偶尔出现。至于不使用操作,我假设你的意思是使用特定的元素向其发送密钥?在这种情况下,我之所以使用操作,是因为我无法选择有问题的元素。但在别处使用element.sendKeys时,问题并未出现。