Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium sendkeys使用Chrome驱动程序删除字符_Java_Google Chrome_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

Java Selenium sendkeys使用Chrome驱动程序删除字符

Java Selenium sendkeys使用Chrome驱动程序删除字符,java,google-chrome,selenium-webdriver,selenium-chromedriver,Java,Google Chrome,Selenium Webdriver,Selenium Chromedriver,带有Chrome驱动程序的Selenium sendkeys会删除字符“2”和“4”。其他字符也可以。当我使用其他浏览器(IE或FF)时,一切正常 代码: 结果:输入框中填充了 13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 缺少字符2和4,其他字符填写正确 我使用Windows 7 64位,Chrome版本29.0.1547.57 m,ChromeDriver win32(v2.2.215849.dyu)-最新版本

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

代码:

结果:输入框中填充了

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
缺少字符
2
4
,其他字符填写正确


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

调查您是否来自捷克共和国,我将大胆假设,您的键盘默认设置为捷克语

当我的系统默认使用捷克语键盘时,
sendKeys
也出现了一些奇怪的问题。自从我把默认设置改为英语后,问题就消失了

如果这没有帮助,请提供信息如果您尝试以下方法,将会发生什么:

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

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


VNC实际上是删除字符的一个。一旦我使用VirtualBox控制台转到与VM的直接连接。。。它工作得很好

这是一个老问题,但仍然有效。我使用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)));
    }
}
清除操作可能发生在以下四个位置之一:

  • 在发送字母“a”之前
  • 在发送字母“b”之前
  • 在发送字母“c”之前
  • 在发送字母“c”之后
我建议始终检查我们刚刚执行的操作是否成功完成,例如:当我们想要清除输入字段时,最好:

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

  • 对于一个简单的任务,要执行很多操作。然而,这将使测试更加稳定

    我也有同样的问题。我最终在循环中调用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);
    }
    

    希望这有帮助。

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

    public void sendTextToFieldWithJS (String str, WebElement element){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].value='" + str + "';", element);
    }
    

    您是否尝试发送包含许多
    sendKeys
    调用的字符串?有什么不同吗?我也有这个问题,但chrome本身不会接受一封信——今天是“s”。似乎是铬本身,所以硒不能做任何事情。接受大写字母“S”。非常奇怪的行为。一旦我关闭此驱动程序,它将重新开始工作。俄语键盘存在相同问题,我已提交问题:
    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);
    }
    
    public void sendTextToFieldWithJS (String str, WebElement element){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].value='" + str + "';", element);
    }