Selenium clear() 命令不清除元素



我已经用Java编写硒脚本一段时间了。我今天遇到了一个非常奇怪的问题。这是问题所在:

我使用 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);

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

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

您尝试填写的字段可能autocomplete属性设置为 on。[参考资料]

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

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

可能的调试区域:

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

    祝你好运!

    PS:这些Thread.sleep是不可取的。

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

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

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

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

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

    我正在使用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);
    }
    }
    }
    

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

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

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

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

    在某些网络表单中,清除字段后跟.sendKeys()将不起作用,因为它会不断用一些自动填充值重新填充它(在我的情况下,这是由于输入元素的 onfocus 属性函数(。操作链没有帮助,唯一对我有用的是直接用 javascript 替换 value 属性:

    在爪哇中:

    driver.executeScript("document.getElementById('elementID').value='new value'");
    

    在 Python 中(几乎相同(:

    driver.execute_script("document.getElementById('elementID').value='new value'")
    

    有关此解决方案的 Java 版本的更多信息,请参阅此问题。

    面对类似的事情。我有必需的输入字段,当它们被清除时,它们不会更新验证。我所做的是创建自定义方法,该方法将检查element.Text是否为空,然后发送Keys.LeftControl + "a" + Keys.Delete

    public static void Clear(WindowsElement element)
    {
    if (element.Text != String.Empty)
    element.SendKeys(Keys.LeftControl + "a" + Keys.Delete);
    }
    
    javascriptExecutor js =(javascriptExecutor) driver;
    js.executescript("arguments[0].click()",webElement);
    

    相关内容

    • 没有找到相关文章

    最新更新