gpt4 book ai didi

java - 如何始终使用 Selenium 从输入元素中删除默认文本?

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:41 25 4
gpt4 key购买 nike

我正在尝试使用 Selenium WebDriver 将文本输入到具有默认文本“输入用户 ID”的 GWT 输入元素。以下是我尝试使用的几种方法:

        searchField.click();
if(!searchField.getAttribute("value").isEmpty()) {
// clear field, if not already empty
searchField.clear();
}
if(!searchField.getAttribute("value").isEmpty()) {
// if it still didn't clear, click away and click back
externalLinksHeader.click();
searchField.click();
}

searchField.sendKeys(username);

奇怪的是,上面这只在某些时候有效。有时,它最终会搜索“输入用户 IDus”,基本上是在默认文本后开始键入“用户名”——甚至都没有完成。

还有其他更好、更可靠的方法来清除 GWT 元素中的默认文本吗?

编辑添加:输入元素的 HTML。不幸的是,由于 JS/GWT 的火爆,没有太多可看的东西。这是未选中时的字段:

<input type="text" class="gwt-TextBox empty" maxlength="40">

在我点击它并手动赋予它焦点后,默认文本和“空”类被删除。

如果更改导致空文本字段,则 setDefaultText() 的 JS 将同时调用 onBlur()onChange()。我猜这就是 searchField.clear() 没有帮助的原因。

我也在 Debug模式下逐步完成了这个方法,在那种情况下,它永远不会起作用。正常运行时,它大部分时间都在工作。不过,我不能说为什么。

最佳答案

好的,当 clear() 方法清除 input 并将其留空时,脚本显然会启动。下面给出了它提出的解决方案。

  1. 天真的一个,按下 Backspace 10 次:

    String b = Keys.BACK_SPACE.toString();
    searchField.sendKeys(b+b+b+b+b+b+b+b+b+b + username);

    (来自 Apache Commons Lang 的 StringUtils.repeat() 或 Google Guava 的 Strings.repeat() 可能会派上用场)

  2. 使用 Ctrl+A, Delete 的更好:

    String del = Keys.chord(Keys.CONTROL, "a") + Keys.DELETE; 
    searchField.sendKeys(del + username);
  3. 通过 JavaScript 删除 input 的内容:

    JavascriptExecutor js = (JavascriptExecutor)driver;
    js.executeScript("arguments[0].value = '';", searchField);
    searchField.sendKeys(username);
  4. 完全通过 JavaScript 设置 input 的值:

    JavascriptExecutor js = (JavascriptExecutor)driver;
    js.executeScript("arguments[0].value = '" + username + "';", searchField);

请注意,javascript 可能并不总是有效,如下所示:Why can't I clear an input field with javascript?

关于java - 如何始终使用 Selenium 从输入元素中删除默认文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com