我已经用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 代码段,这将有所帮助。
可能的调试区域:
祝你好运!
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);