【问题标题】:Selenium: How to prepend data to a text box or text AreaSelenium:如何将数据添加到文本框或文本区域
【发布时间】:2021-05-12 17:12:14
【问题描述】:

我正在使用 Selenium Web 驱动程序。我有一个文本区域,其中写入了一些文本。现在我怎样才能在其中预先添加一些文本/html 或在特定位置插入数据?

以下代码将其附加到文本区域/文本框

driver.findElement(By.xpath("textBox/textArea")).sendKeys("abc");

即。如果文本区域/文本框包含 123。上面的结果将是 123abc。但我想要 abc123 或 12abc3

PS:我正在测试“电子邮件回复”功能。因此,作为用户,当您回复邮件时,不要复制文本,然后清除所有文本,然后在编写新文本后将所有文本复制回来,如下所示:

WebElement element = driver.findElement(By.xpath("textBox/textarea"));
String previousText = element.getAttribute("value");
element.clear();
element.sendKeys("abc" + previousText);

请帮忙...

【问题讨论】:

    标签: selenium selenium-webdriver


    【解决方案1】:
    import org.openqa.selenium.Keys;
    
    ...
    
    WebElement element = driver.findElement(By.xpath("textBox/textarea"));
    element.sendKeys(Keys.HOME + "abc");
    

    或者可能用于多行文本区域

    element.sendKeys(Keys.CONTROL, Keys.HOME);
    element.sendKeys("abc");
    

    【讨论】:

      【解决方案2】:
       WebElement element = driver.findElement(By.xpath("textBox/textarea"));
       String previousText = element.getAttribute("value");
       element.clear();
       element.sendKeys("abc" + previousText);
      

      【讨论】:

      • 谢谢安迪。但我不想要这个。我正在测试“电子邮件回复”功能。因此,作为用户,当您回复邮件时,不要复制文本,然后清除所有文本,然后在写入新文本后将所有文本复制回来
      • @bhuvan 在获得最终结果的过程中发生了什么真的很重要吗?我提供的答案完全符合您的要求。如果这不是您想要的,请修改您的问题,询问您真正想要的是什么。
      • @bhuvan,没关系,最终结果都是一样的。除非您的功能取决于用户输入文本的方式,否则这将正常工作。
      【解决方案3】:

      您可以使用机器人插入文本。
      按照我的方式。
      我希望这可以帮助你。

      public void runScript() {
      
          WebElement textarea = driver.findElement(By.id("textarea"));
      
          insert(textarea, "abc", 2);
      }
      
      public void insert(WebElement textElement, String insertText, int offset) {
      
          String currentText = textElement.getText();
          int len = currentText.length();
          if (len < offset) {
              throw new IllegalArgumentException(String.format("len(%d) < offset(%d)", len, offset));
          }
          Robot robot = null;
          try {
              robot = new Robot();
          } catch (AWTException e) {
              e.printStackTrace();
          }
          robot.setAutoDelay(20);
          // On focus.
          textElement.click();
          // Move cursor for head.
          type(robot, KeyEvent.VK_CONTROL, KeyEvent.VK_HOME);
          for (int i = 0; i < offset; i++) {
              type(robot, KeyEvent.VK_RIGHT);
          }
          textElement.sendKeys(insertText);
      }
      
      public void type(Robot robot, int... keycodes) {
          for (int keycode : keycodes) {
              robot.keyPress(keycode);
          }
          for (int keycode : keycodes) {
              robot.keyRelease(keycode);
          }
      }
      

      【讨论】:

      • 使用Robot 而不是仅仅使用element.sendKeys 有什么优势吗?那个机器人类是什么 - 有任何文档吗?我无法通过谷歌找到任何关于它的信息
      【解决方案4】:
      htmlContent = driver.find_element_by_id("wp-editor-area")
      htmlContent.sendKeys(Keys.CONTROL, Keys.HOME)
      htmlContent.sendKeys("The Content You WANT!")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多