我一直用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);
您尝试填充的字段可能已将autocomplete
属性设置为on。 [Reference]
如果clear()
在行执行时起作用,那么可以肯定地说这不是webdriver特定的问题。
如果您可以显示您正在处理的页面部分的html片段,将会有所帮助。
可能的调试领域:
Thread.sleep
是不可取的。我不知道你的元素保持其值的确切原因,但你可以通过使用元素对象的sendKeys方法发送'Ctrl + A + Delete'组合键来尝试替代文本清除:
emailAddress.sendKeys(Keys.chord(Keys.CONTROL,"a", Keys.DELETE));
我在使用自动完成插件的文本字段时遇到了类似的问题。我必须明确清除属性值以及执行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);
}
另一种在python中对我有用的方法,但不是你称之为优雅的方式:
for _ in range(4):
risk_percentage.send_keys(Keys.BACK_SPACE)