【问题标题】:how to delete default values in text field using selenium?如何使用 selenium 删除文本字段中的默认值?
【发布时间】:2012-06-03 17:09:17
【问题描述】:

我想删除文本框的默认值以输入新值,但我不知道该怎么做。

我想使用 CTRL+a 然后 Delete 但我不知道该怎么做。

我什至使用了WebDriver的命令driver.findElement("locator").clear();

【问题讨论】:

  • 你尝试的时候发生了什么?您是否收到异常,或者什么也没发生,或者...?
  • 另外,你能写到元素吗?如果您尝试element.sendKeys("bla"),文本是否会附加到现有文本? ... 如果没有任何帮助,请向我们展示元素的 HTML 代码。有些事情可能会以不寻常的方式完成,从而破坏事情......

标签: selenium automation selenium-rc


【解决方案1】:

代码有帮助吗?因为您正在编写的代码应该做的事情:

driver.findElement("locator").clear();

如果没有帮助,那么试试这个:

WebElement toClear = driver.findElement("locator");
toClear.sendKeys(Keys.CONTROL + "a");
toClear.sendKeys(Keys.DELETE);

也许您需要将 Keys.CONTROL + "a" 转换为 CharSequence,但第一种方法应该可以发挥作用

【讨论】:

  • @user1374181 我不明白你的问题——“简单的 JUnit”是什么意思?这些是利用 Selenium 中 Keys enum 的 Selenium WebDriver 命令。
  • @Slanec :我的意思是如果 selenium2 不可能,它可以与使用 RC 的 junit 一起使用。
  • 那么 selenium1 可以吗?
  • 当我使用 `Global.driver.FindElement(rangeFrom).Clear(); 时导致错误“error: invalid element state: Element is not currently interactable and may not be manipulated ” `。不幸的是,这在调试代码有效时有效。可能需要额外的等待时间。 @PavelJanicek
【解决方案2】:

对于页面对象模型-

 @FindBy(xpath="//foo")
   public WebElement textBox;

现在在你的函数中

 public void clearExistingText(String newText){
    textBox.clear();
    textBox.sendKeys(newText);
  }

对于一般的 selenium 架构 -

driver.findElement(By.xpath("//yourxpath")).clear();
driver.findElement(By.xpath("//yourxpath")).sendKeys("newText");

【讨论】:

  • 这不起作用,它会删除编辑文本值开头的文本
【解决方案3】:

如果您正在寻找 Selenium RC 的解决方案,您可以简单地使用

// assuming 'selenium' is a healthy Selenium instance
selenium.type("someLocator", "");

【讨论】:

  • 它做了什么?当您尝试键入一些文本时会发生什么?有没有例外?
  • 它既不抛出异常也不删除值,我什至试图用其他值覆盖该值....
  • 向我们展示 HTML 元素的代码。您提到的所有这些事情都应该有效。
  • @user1374181 现在我很困惑。为什么我得到了接受?是的,这是正确的答案,但它不适用于您的情况,是吗?
  • 你的命令有效,但页面出现问题,当它不是时它就像一个弹出窗口,我将 selectWindow 更改为 selectPop,我的问题通过你的建议解决了。非常感谢你。
【解决方案4】:

您可以使用下面的代码。它选择字段中预先存在的值并用新值覆盖它。

driver.findElement(By.xpath("*enter your xpath here*")).sendKeys(Keys.chord(Keys.CONTROL, "a"),*enter the new value here*);

【讨论】:

    【解决方案5】:

    driver.findElement(locator).clear() - 此命令适用于所有情况

    【讨论】:

    • 在 Java v3.14 中对我不起作用。它什么都不做。
    【解决方案6】:

    clear() 对我不起作用。但这确实:

    input.sendKeys(Keys.CONTROL, Keys.chord("a")); //select all text in textbox
    input.sendKeys(Keys.BACK_SPACE); //delete it
    input.sendKeys("new text"); //enter new text
    

    【讨论】:

      【解决方案7】:

      下面的函数会使用 PromiseWhile 将输入的字符一个一个地删除,直到输入字段为空

      driver.clearKeys = function(element, value){
        return element.getAttribute('value').then(function(val) {
          if (val.length > 0) {
            return new Promise(function(resolve, reject) {
              var len;
              len = val.length;
              return promiseWhile(function() { 
                return 0 < len;
              }, function() {
                return new Promise(function(resolve, reject) {
                  len--;
                  return element.sendKeys(webdriver.Key.BACK_SPACE).then(function()              {
                    return resolve(true);
                  });
                });
              }).then(function() {
                return resolve(true);
              });
            });
          }
      

      【讨论】:

        【解决方案8】:

        这对我有用:

        driver.findElement(yourElement).clear();
        driver.findElement(yourelement).sendKeys("");
        

        【讨论】:

        • 在 Java 中,我看到 clear() 什么都不做
        【解决方案9】:

        .clear() 可用于清除文本

          (locator).clear();
        

        对定位器使用 clear 会删除该精确定位器中的所有值。

        【讨论】:

          【解决方案10】:

          在软件测试服务中,这可以通过多种方式实现,上面显示的一些选项如下所示。

          • 使用 java 脚本

          driver.executeScript("document.getElementByXpath('element').setAttribute('value', 'abc')");

          使用动作类 Actions 动作 = new Actions(driver);

          actions.click(driver.findElement(element).keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE).build().perform()) ;

          【讨论】:

            【解决方案11】:
            actions = ActionChains(driver)
            ak = driver.find_element_by_id('blogname')
            actions.move_to_element(ak)
            actions.click()
            actions.key_down(Keys.CONTROL).send_keys('a').key_down(Keys.DELETE)
            actions.perform()
            

            【讨论】:

            • 欢迎来到 Stack Overflow,感谢您提供答案。您能否编辑您的答案以包括对您的代码的解释?这将有助于未来的读者更好地了解正在发生的事情,尤其是那些刚接触该语言并难以理解概念的社区成员。
            猜你喜欢
            • 2013-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-30
            • 1970-01-01
            • 2020-07-27
            • 1970-01-01
            相关资源
            最近更新 更多