如何使用Selenium从输入元素中一致地删除默认文本?

mco*_*ole 11 java gwt selenium webdriver

我正在尝试使用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);
Run Code Online (Sandbox Code Playgroud)

奇怪的是上面这个只在某些时候起作用.有时,它最终搜索"输入用户ID",基本上开始在默认文本后键入"用户名" - 甚至没有完成.

从GWT元素中清除默认文本的任何其他更好,更可靠的方法?

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

<input type="text" class="gwt-TextBox empty" maxlength="40">
Run Code Online (Sandbox Code Playgroud)

单击它并手动对焦后,将删除默认文本和"空"类.

JS将setDefaultText()被调用onBlur(),onChange()如果更改导致空文本字段.猜猜这就是为什么searchField.clear()没有帮助.

我也在调试模式中逐步完成了这个方法,在这种情况下,它永远不会工作.当正常运行时,它在大多数时间都有效.但我不能说为什么.

Pet*_*ček 20

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

  1. 天真的,按Backspace10次​​:

    String b = Keys.BACK_SPACE.toString();
    searchField.sendKeys(b+b+b+b+b+b+b+b+b+b + username);
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    String del = Keys.chord(Keys.CONTROL, "a") + Keys.DELETE; 
    searchField.sendKeys(del + username);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除inputvia JavaScript 的内容:

    JavascriptExecutor js = (JavascriptExecutor)driver;
    js.executeScript("arguments[0].value = '';", searchField);
    searchField.sendKeys(username);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 完全设置inputvia JavaScript 的值:

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

请注意,javascript可能并不总是有效,如下所示:为什么我不能用javascript清除输入字段?