【问题标题】:Unable to clear textarea which auto inputs text on clear and blur using Selenium WebDriver无法清除使用 Selenium WebDriver 自动输入清晰和模糊文本的文本区域
【发布时间】:2019-06-29 05:38:21
【问题描述】:

我正在使用 Java 的 Selenium WebDriver。 我有一个文本区域,我想清除默认内容并在其中输入新内容。功能是这样的,如果我从 textarea 中清除文本并点击 Tab 按钮,那么默认文本将自动填充。 下面是textarea的HTML:

<textarea autocomplete="off" class="form-control rd-control rd-control--textarea empty" cols="20" data-bind="value: offerTitle, expandedTextArea: offerTitle, valueUpdate: 'afterkeydown', customerRequiredFieldsBinding" id="CheckoutWelcomeTitle" name="CheckoutWelcomeTitle" placeholder="ex. Here comes the best offer" rows="1" type="text" data-autosize-on="true" style="overflow-y: hidden; height: 35.9792px;" onblur="setTextColorDefault(this)" oninput="setTextColor(this)">Let's bid on a discount code!</textarea>

我尝试使用:

driver.findElement(By.id("CheckoutWelcomeTitle")).clear()

但这不起作用。
我也试过这个:

driver.findElement(By.id("CheckoutWelcomeTitle")).sendKeys(Keys.CONTROL + "a") 
driver.findElement(By.id("CheckoutWelcomeTitle")).sendKeys(Keys.DELETE)

这有时有效,但并非总是如此。有时它会清除数据并重新填充默认文本。

是否有任何其他方法可以清除此文本区域以使其每次都能正常工作?

如果有帮助,开发人员已使用 JavaScript 在模糊事件时重新填充文本框。

编辑:我使用了显式等待,条件是元素可点击。

【问题讨论】:

  • 如果textarea没有被清空,你有什么异常吗?还是您的代码覆盖了默认内容?如果页面正在加载,您总是需要等待,例如to 元素是可点击的,参见 org.openqa.selenium.support.ui.ExpectedConditions

标签: java selenium-webdriver xpath css-selectors webdriverwait


【解决方案1】:

使用 Java 脚本执行器应该可以工作。

JavascriptExecutor executor = (JavascriptExecutor) driver;

executor.executeScript("document.getElementById('CheckoutWelcomeTitle').value=''");

【讨论】:

    【解决方案2】:

    所需的元素是动态元素,因此要定位元素,您必须诱导 WebDriverWait 以使 元素可点击,您可以使用以下任一 @987654321 @:

    • cssSelector:

      WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("textarea.form-control.rd-control.rd-control--textarea.empty#CheckoutWelcomeTitle")));
      myElement.click();
      myElement.clear();
      
    • xpath:

      WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//textarea[@class='form-control rd-control rd-control--textarea empty' and @id='CheckoutWelcomeTitle']")));
      myElement.click();
      myElement.clear();
      

    【讨论】:

      【解决方案3】:

      我认为值得一提的是无需自定义脚本即可工作的解决方案;考虑到驱动程序和操作系统的所有可能排列,该问题的最新解决方案是:

      private fun clearField(element: WebElement) {
          element.sendKeys(Keys.chord(Keys.SHIFT, Keys.ARROW_UP), Keys.DELETE)
          element.sendKeys(Keys.chord(Keys.CONTROL, "a"), Keys.DELETE)
          element.clear()
      }
      

      对于 clear 并不总是有效的事实,以及第一个在 mac 上有效,第二个在 windows 上有效这一事实,这是一个相当多余的解决方案。
      所有这三个组合也已在带有验证和输入掩码的 react 应用程序上进行了测试。

      要导入的命名空间是import org.openqa.selenium.Keys

      这是一个示例代码,为避免过时的元素,您不应传递WebElements

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2019-01-12
        • 2020-09-13
        • 1970-01-01
        相关资源
        最近更新 更多