为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2022-06-04 17:24:15
我正在使用 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 在模糊事件上重新填充文本框。编辑:我已经使用显式等待元素的条件是可点击的。
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

使用 Java Script 执行器它应该可以工作。


JavascriptExecutor executor = (JavascriptExecutor) driver;


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


查看完整回答
反对 回复 2022-06-04
?
慕少森

TA贡献2019条经验 获得超9个赞

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


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 上工作的事实,这是一个相当多余的解决方案。

所有这三个组合也已经在带有验证和输入掩码的反应应用程序上进行了测试。


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


这是一个示例代码,以避免您不应该传递WebElements的陈旧元素。


查看完整回答
反对 回复 2022-06-04
?
慕斯709654

TA贡献1840条经验 获得超5个赞

所需元素是动态元素,因此要定位元素,您必须诱导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();


查看完整回答
反对 回复 2022-06-04
  • 3 回答
  • 0 关注
  • 355 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号