如何使用Java和Selenium在textarea中快速设置文本

时间:2020-01-15 13:55:16

标签: java selenium

此代码有效,但是sendKeys一次发送所有字符,并且时间很长(40s)。

String value = "...very long text...";
WebElement element = ...
element.sendKeys(value);

如何使用Java和Selenium快速在textarea中设置文本?要么使用Selenium元素,要么通过修改速度或字符被一一发送。

请使用javascript执行没有解决方案。

4 个答案:

答案 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");
相关问题