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

问题描述 投票:3回答:4

我一直用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);
selenium selenium-webdriver selenium-chromedriver
4个回答
7
投票

您尝试填充的字段可能已将autocomplete属性设置为on。 [Reference]

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

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

可能的调试领域:

  • 使用java脚本执行程序强制删除页面加载时的自动完成属性
  • 关闭驱动程序级别的自动完成设置。我相信解决方案会因使用的驱动程序而异。 祝好运! PS:那些Thread.sleep是不可取的。

  • 8
    投票

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

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

    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);
    }
    

    -1
    投票

    另一种在python中对我有用的方法,但不是你称之为优雅的方式:

    for _ in range(4):
        risk_percentage.send_keys(Keys.BACK_SPACE)
    
    © www.soinside.com 2019 - 2024. All rights reserved.