selenium clear()命令不清除该元素

时间:2018-06-04 09:49:16

标签: selenium selenium-webdriver selenium-chromedriver

我用Java编写了一段时间的selenium脚本。我今天遇到了一个非常奇怪的问题。

以下是问题: 我使用webelement.clear()方法清除了一个文本字段,稍后在执行下一个命令(单击事件)时,我之前清除过的文本区域现在填充了之前填充的值。

以下是代码段:

mobileNumField.get(0).clear();
Thread.sleep(4500);
emailAddress.get(0).click();
emailAddress.get(0).clear();
Thread.sleep(4500);
emailAddress.get(0).sendKeys(Keys.TAB);

8 个答案:

答案 0 :(得分:7)

我不知道你的元素保持其值的确切原因,但你可以通过使用元素对象的sendKeys方法发送'Ctrl + A + Delete'组合键来尝试替代文本清除:

emailAddress.sendKeys(Keys.chord(Keys.CONTROL,"a", Keys.DELETE));

答案 1 :(得分:7)

您尝试填写的字段可能会将autocomplete属性设置为开启。 [Reference]

如果clear()在行执行时有效,那么可以肯定地说这不是特定于webdriver的问题。

如果您可以显示您正在处理的网页部分的html代码段,那将会有所帮助。

可能的调试范围:

  • 使用java脚本执行器强制删除页面加载时的自动完成属性
  • 关闭驱动程序级别的自动完成设置。我相信解决方案会因使用的驱动程序而异。

    祝你好运!

    PS:那些Thread.sleep(s)是不可取的。

  • 答案 2 :(得分:1)

    我在使用自动完成插件的文本字段中遇到了类似的问题。我必须明确清除属性值以及执行SendKeys。我创建了一个扩展方法来封装行为,希望下面的代码片段会有所帮助:

    public static void SendKeysAutocomplete(this IWebElement element, string fieldValue)
    {
       element.SendKeys(fieldValue);
       element.SetAttribute("value", fieldValue);
    }
    
    public static void SetAttribute(this IWebElement element, string attributeName, string attributeValue)
    {
       var driver = WebDriverHelper.GetDriverFromScenarioContext();
    
       var executor = (IJavaScriptExecutor)driver;
       executor.ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2]);", element, attributeName, attributeValue);
    }
    

    答案 3 :(得分:1)

    我通过在BasePage中添加一个函数来清除给定WebElement的字段来解决此问题。

     public void clearWebField(WebElement element){
        while(!element.getAttribute("value").equals("")){
            element.sendKeys(Keys.BACK_SPACE);
        }
    }
    

    您也可以在遇到问题的页面中实现此方法。

    答案 4 :(得分:0)

    遇到类似问题。输入字段被清除,但错误消息未更新。 似乎只有在您输入和删除字符后,某些输入字段才能正常工作:

    element.sendKeys(text);
    element.sendKeys(Keys.SPACE, Keys.BACK_SPACE);
    

    答案 5 :(得分:0)

    我正在使用Mac,以下代码也有帮助

      public static void macCleanHack(WebElement element) {
            String inputText = element.getAttribute("value");
            if( inputText != null ) {
                for(int i=0; i<inputText.length();i++) {
                    element.sendKeys(Keys.BACK_SPACE);
                }
            }
    
        }
    

    答案 6 :(得分:0)

    希望这有助于清除该字段,然后sendKeys()所需的值

     while (!inputField.getAttribute("value").equals("")) {
            inputField.sendKeys(Keys.BACK_SPACE);
           }
            inputField.sendKeys("your_value");
    

    答案 7 :(得分:-1)

    在python中对我有用的另一种方法,但不是您所说的优雅:

    for _ in range(4):
        risk_percentage.send_keys(Keys.BACK_SPACE)
    
    相关问题