硒发送键使用Chrome驱动程序删除字符

带有Chrome驱动程序的硒发送键会删除字符“2”和“4”。其他字符也可以。当我使用其他浏览器(IE或FF)时,一切正常。

法典:

WebElement name = driver.findElement(localizator);
name.clear();
name.sendKeys("1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ");

结果:输入框填充了

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ

字符和缺失,其他字符正确填充。24

我使用Windows 7 64bit,Chrome版本29.0.1547.57 m,ChromeDriver win32(v2.2.215849.dyu) - 最新的一个。


答案 1

调查你也来自捷克共和国,我将做出疯狂的假设,你的键盘设置为默认捷克语。

当我的系统将捷克语键盘作为默认键盘时,我也遇到了一些奇怪的问题。由于我将默认值更改为英语,因此问题消失了。sendKeys

如果这没有帮助,请提供信息,如果您尝试此操作会发生什么:

  name.sendKeys("2");
  name.sendKeys("22222222");
  name.sendKeys("4");
  name.sendKeys("44444444");
  name.sendKeys("424242");

答案 2

这是一个古老的问题,但仍然有效。我使用 Chrome 驱动程序 v2.53。

看起来密钥正在逐个发送到浏览器(就像一个单独的keyDown事件)。当它发生得太快时,可以观察到以下两个结果之一:

  • 字符已移位
  • 字符丢失

我的解决方案如下:

protected void sendKeys(final WebElement element, final String keys) {
    for (int i = 0; i < keys.length(); i++){
        element.sendKeys(Character.toString(keys.charAt(i)));
        waitUntil(attributeContains(element, "value", keys.substring(0, i)));
    }
}

它可靠且工作速度足够快。更重要的是,当我们想在发送密钥之前清除输入字段时,可能会发生相同的事件偏移,例如:

element.clear();
element.sendKeys("abc");

清除操作可能会在以下四个位置之一发生:

  • 在发送字母“a”之前
  • 在发送字母“b”之前
  • 在发送字母“c”之前
  • 发送字母“c”后

我建议始终检查我们刚刚执行的操作是否已成功完成,例如:当我们想要清除输入字段时,最好:

  1. 检查输入字段的值
  2. 如果值为空字符串,则返回
  3. 如果值不是空字符串,则调用 clear() 函数并等待,直到该值等于空字符串

对于一个简单的任务来说,执行很多操作。但是,这将使测试更加稳定。


推荐