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

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

getDriver().findElement(By.id("PhoneNumber")).sendKeys(Keys.chord("9876544322")); 

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

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

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

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

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

以下是我使用Selenium Webdriver(Java)逐个字符发送的方法。 这样在后端,我在每个字母处按下validation字符是否存在于输入中。 正常的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); } } 

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

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

.sendKeys()方法将接受一个String。 只需传递您的输入并随意使用它。

 driver.findElement(By.id("element")).sendKeys("Field Input Text"); 

当我想逐个字母地输入字符串时,我在测试中使用此函数。

 public void typeOnLetterByLetter(WebElement webElement, String value, long waitBetweenLetters, ChronoUnit unitTime) { clear(webElement); Arrays.asList(value.toCharArray()).forEach(letter -> { typeOn(webElement, String.valueOf(letter)); pause(waitBetweenLetters, unitTime); }); } private void pause(long time, ChronoUnit unitTime) { try { Thread.sleep(Duration.of(time, unitTime).toMillis()); } catch (InterruptedException ignore) { } }