【问题标题】:How to set text in textarea quickly using Java and Selenium如何使用 Java 和 Selenium 在 textarea 中快速设置文本
【发布时间】:2020-01-15 13:55:16
【问题描述】:

此代码有效,但 sendKeys 将所有字符一一发送,并且时间非常长(40 秒)。

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

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

请不要使用 javascript 执行解决方案。

【问题讨论】:

  • 这能回答你的问题吗? Fast writing in a textBox with selenium and pythonhere
  • @Sers,你没读过Please no solution with javascript execution.
  • 没有任何配置可以更改以加快发送密钥。为什么不用JS,有什么限制吗?
  • 这是我的问题。我不会改变我的问题来坚持你的答案,这不是我的需要。
  • 没有人要求您更改您的问题。祝你好运

标签: java selenium


【解决方案1】:

/!\ 注意,这是否只是一种解决方法。

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");

【讨论】:

  • 您在问题中提到“没有执行 Javascript 的答案”,但您刚刚使用 JSE 发布了您自己的问题的答案。这应该是对您的问题的修改吗?
  • @Christine,我注意到Caution, is it a workaround only.,如果你有解决方案,我的问题仍然有效。
  • @sgrillon 我尝试了多种 Javascript 解决方案,但都没有奏效。这就像一个魅力。感谢您的“小心,这是否只是一种解决方法”的解决方案。
【解决方案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)
            {

            }

【讨论】:

    【解决方案3】:

    sendKeys 方法是使用 Selenium 将文本输入文本字段的唯一纯 Java 方法。不幸的是,所有其他方式都需要 JavaScript,这是您不想做的事情。

    您唯一的其他选择是通过submitting a pull requestSelenium project on GitHub 贡献所需的行为,并说服万维网联盟将这种新方法(sendKeysQuickly?)包含在官方 WebDriver 规范中:@987654323 @——确实不是一个小任务!

    【讨论】:

    【解决方案4】:

    可以直接使用js脚本设置值:

      JavascriptExecutor js = (JavascriptExecutor) driver;
      js.executeScript("document.getElementById('textareaId').setAttribute('value', 'yourText')");
    

    【讨论】:

    • 你不看Please no solution with javascript execution. ?
    • @sgrillon sendkeys 被构建为顺序工作,使其“快速”的唯一方法是使用 js,仅仅是因为 selenium 无法直接访问 dom,实际上,所有 dom 操作都是通过js
    • 我的问题是如何减少每个发送密钥之间的时间(通过配置)?不通过 javascript。
    • 我通过 xpath 找到我的元素,我不一定有 id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2018-08-18
    • 2022-10-01
    • 2021-10-20
    相关资源
    最近更新 更多