此代码有效,但是sendKeys
一次发送所有字符,并且时间很长(40s)。
String value = "...very long text...";
WebElement element = ...
element.sendKeys(value);
如何使用Java和Selenium快速在textarea中设置文本?要么使用Selenium元素,要么通过修改速度或字符被一一发送。
请使用javascript执行没有解决方案。
答案 0 :(得分:2)
sendKeys
方法是使用Selenium将文本输入文本字段的唯一纯Java方法。不幸的是,所有其他方式都需要JavaScript,这是您不想做的。
您唯一的选择是通过Selenium project on GitHub以期望的行为为submitting a pull request做出贡献,并说服万维网联盟在此方法中加入这种新方法(sendKeysQuickly
?)。正式的WebDriver规范:https://www.w3.org/TR/webdriver/ —确实不是一件容易的事!
答案 1 :(得分:2)
这是一种使用剪贴板的方法:
String value = "...very long text...";
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable transferable = new StringSelection(value);
clipboard.setContents(transferable, null);
wait = new WebDriverWait(driver, ec_Timeout);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("name_of_input_element")));
String vKey = "v";
try
{
element.sendKeys(Keys.CONTROL , vKey);
}
catch (Exception ex)
{
}
答案 2 :(得分:0)
您可以直接使用js脚本设置值:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('textareaId').setAttribute('value', 'yourText')");
答案 3 :(得分:0)
/!\警告,仅是一种解决方法。
String value = "...very long text...";
WebElement element = ...
String javascript = "arguments[0].value=arguments[1];";
(JavascriptExecutor) driver.executeScript(javascript, element, value.substring(0, value.length() - 1));
element.sendKeys(value.substring(value.length() - 1));
/!\第二种解决方法(不适用于远程):
String value = "...very long text...";
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(value), null);
WebElement element = ...
element.sendKeys(Keys.CONTROL , "v");