15

带有 Chrome 驱动程序的 Selenium sendkeys 会丢弃字符“2”和“4”。其他字符正常。当我使用其他浏览器(IE 或 FF)时,一切正常。

代码:

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

结果:输入框被填满

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ

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

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

4

5 回答 5

8

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

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

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

  name.sendKeys("2");
  name.sendKeys("22222222");
  name.sendKeys("4");
  name.sendKeys("44444444");
  name.sendKeys("424242");
于 2013-08-28T14:43:29.457 回答
7

这是一个老问题,但仍然有效。我使用 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()函数并等待该值等于空字符串

一个简单的任务要执行很多操作。但是,它将使测试更加稳定。

于 2017-04-25T16:23:28.047 回答
5

我遇到过同样的问题。我最终在一个循环中调用了 sendkeys,直到插入了正确的值。这是我所做的:

WebElement name = driver.findElement(By.xpath(...));
this.sendkeys(name,"yourValue");

private void sendkeys(WebElement ele, String val) throws 
InterruptedException
{   ele.clear();
    while(true)
    {   ele.sendKeys(val);
        if(ele.getAttribute("value").equals(val))
            break;
        else
        {   ele.clear();
            Thread.currentThread();
            Thread.sleep(3000);
        }
    }

    Thread.currentThread();
    Thread.sleep(3000);
}

希望这可以帮助。

于 2017-10-20T17:09:51.080 回答
2

在使用 VNC 连接到 VM 并以这种方式运行 Selenium 测试时,我也遇到了这个问题。

VNC 实际上是一个丢弃字符。一旦我使用 VirtualBox 控制台直接连接到虚拟机......它工作得很好。

于 2014-05-01T15:35:37.903 回答
0

您可以使用 java 脚本发送文本。请参阅下面的代码片段。

public void sendTextToFieldWithJS (String str, WebElement element){
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("arguments[0].value='" + str + "';", element);
}
于 2021-04-21T20:41:27.283 回答