如何在selenium webdriver的文本字段中逐个输入字符?

Raj*_*tra 5 java selenium selenium-webdriver

如何在selenium webdriver的文本字段中逐个输入字符?我使用了下面的代码,但它不起作用

getDriver().findElement(By.id("PhoneNumber")).sendKeys(Keys.chord("9876544322"));
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何解决这个问题?

小智 9

以下是我使用Selenium Webdriver(Java)逐个字符发送的方法.这样在后端,我在每个字母处按下验证字符是否存在于输入中.正常element.sendKeys()对我来说效果不好5次 - 最后一个字母丢失了,我想Selenium Webdriver有些问题,我不知道.尝试下面的代码,它可以100%的时间为我工作.

public void TypeInField(String xpath, String value){
    String val = value; 
    WebElement element = driver.findElement(By.xpath(xpath));
    element.clear();

    for (int i = 0; i < val.length(); i++){
        char c = val.charAt(i);
        String s = new StringBuilder().append(c).toString();
        element.sendKeys(s);
    }       
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我获得了键入所需的值,并且在for循环中,我获取每个字符,将其转换为字符串并将其发送到文本框.此外,我搜索xpath,您可以将其更改为id,classname或任何你想要的.


Rag*_*hav 8

如果你想让你的 sendKeys 更人性化,我使用了这样的东西:

private static void sendHumanKeys(WebElement element, String text) {
    Random r = new Random();
    for(int i = 0; i < text.length(); i++) {
        try {
            Thread.sleep((int)(r.nextGaussian() * 15 + 100));
        } catch(InterruptedException e) {}
        String s = new StringBuilder().append(text.charAt(i)).toString();
        element.sendKeys(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

它以 100 毫秒的延迟发送密钥,但平均只有 100 毫秒。它创建了一个平均 100ms 和 std 的正态分布。偏差 15ms。

  • 美丽的!非常适合我。我喜欢下一个高斯!一个很好的接触。人是随机的,而计算机是精确的。哈哈!:-) (2认同)

tim*_*fer 6

sendKeys()确实按顺序输入字符,但它有时可以足够快地运行以被视为复制/粘贴操作.但是,它实际上是为了模拟用户通过键入输入文本.根据sendKeys()JavaDoc:

/**使用此方法模拟键入元素,可以设置其值.*/

如果你想减慢速度,可以创建一个接受WebElement和String args的方法,将String转换为charsequence[],然后使用for循环并在.sendKeys()中输入数组的每个索引,后跟a Thread.sleep().这似乎很没效率的,但是,作为sendKeys()识别字符串作为charsequence[](字符串一个charsequence[]在Java中).添加Thread.sleep()遗嘱只会不必要地减慢您的测试速度.

老实说,sendKeys()符合您描述的需求.这是在键盘上模拟用户的最佳方式,它只是非常快.


tim*_*fer 3

.chord() 将同时按下所有键。不太适合现场输入。

.sendKeys() 方法将接受一个字符串。只需传递您的输入并进行操作即可。

driver.findElement(By.id("element")).sendKeys("Field Input Text");
Run Code Online (Sandbox Code Playgroud)