猿问

无法使用 Selenium WebDriver 清除自动输入清晰和模糊文本的文本区域

我正在使用 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 在模糊事件上重新填充文本框。


编辑:我已经使用显式等待元素的条件是可点击的。


杨__羊羊
浏览 356回答 3
3回答

MYYA

使用 Java Script 执行器它应该可以工作。JavascriptExecutor executor = (JavascriptExecutor) driver;executor.executeScript("document.getElementById('CheckoutWelcomeTitle').value=''");

慕少森

我认为值得一提的是无需自定义脚本即可工作的解决方案;考虑到驱动程序和操作系统的所有可能排列,该问题的最新解决方案是:private fun clearField(element: WebElement) {&nbsp; &nbsp; element.sendKeys(Keys.chord(Keys.SHIFT, Keys.ARROW_UP), Keys.DELETE)&nbsp; &nbsp; element.sendKeys(Keys.chord(Keys.CONTROL, "a"), Keys.DELETE)&nbsp; &nbsp; element.clear()}对于 clear 并不总是有效的事实,以及第一个在 mac 上工作而第二个在 windows 上工作的事实,这是一个相当多余的解决方案。所有这三个组合也已经在带有验证和输入掩码的反应应用程序上进行了测试。要导入的命名空间是import org.openqa.selenium.Keys.这是一个示例代码,以避免您不应该传递WebElements的陈旧元素。

慕斯709654

所需元素是动态元素,因此要定位元素,您必须诱导WebDriverWait以使元素可点击,并且您可以使用以下任一定位器策略: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();
随时随地看视频慕课网APP

相关分类

Java
我要回答