selenium SelSelum Clear()命令不会清除元素

6psbrbz9  于 2022-11-10  发布在  其他
关注(0)|答案(8)|浏览(149)

我已经用Java编写了一段时间的Selify脚本。我今天遇到了一个非常奇怪的问题。问题是这样的:
我使用webelement.lear()方法清除了一个文本字段,稍后在执行下一个命令(Click Event)时,我之前清除的文本区域现在用以前填充的值填充。
以下是代码片段:

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

uqcuzwp81#

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

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

2ic8powd2#

您尝试填充的字段可能已将autocomplete属性设置为ON。Reference(https://www.w3schools.com/tags/att_form_autocomplete.asp)
如果clear()在代码行执行时工作正常,那么可以肯定地说这不是Web驱动程序特有的问题。
如果您能显示您正在处理的页面部分的html片段,将会有所帮助。
可能的调试领域:
1.使用Java脚本执行器强制删除页面加载时的自动完成属性
1.关闭驱动程序级别上的自动完成设置。我相信解决方案会根据所使用的驱动程序而有所不同。
祝好运!
PS:那些Thread.sleep是不可取的。

9jyewag0

9jyewag03#

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

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

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

voj3qocg

voj3qocg4#

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

    }
wztqucjr

wztqucjr5#

我在使用自动补全插件的文本字段时遇到了类似的问题。我必须显式清除属性值并执行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);
}
p4rjhz4m

p4rjhz4m6#

面临着类似的问题。输入字段将被清除,但错误消息不会更新。似乎只有当您输入和删除一个字符时,某些输入字段才能正常工作:

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

axkjgtzd7#

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

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

zzwlnbp88#

在一些Web表单中,清除字段后跟.sendKeys()不起作用,因为它会不断地用某个自动填充值重新填充它(在我的例子中,这是由于输入元素的onFocus属性函数)。动作链帮不上忙,我唯一能做的就是将Value属性直接替换为Java脚本:
在Java中:

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

在Python中(几乎完全相同):

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

有关该解决方案的Java版本的更多信息,请参阅question

相关问题