我用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);
答案 0 :(得分:7)
我不知道你的元素保持其值的确切原因,但你可以通过使用元素对象的sendKeys方法发送'Ctrl + A + Delete'组合键来尝试替代文本清除:
emailAddress.sendKeys(Keys.chord(Keys.CONTROL,"a", Keys.DELETE));
答案 1 :(得分:7)
您尝试填写的字段可能会将autocomplete
属性设置为开启。 [Reference]
如果clear()
在行执行时有效,那么可以肯定地说这不是特定于webdriver的问题。
如果您可以显示您正在处理的网页部分的html代码段,那将会有所帮助。
可能的调试范围:
祝你好运!
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)