WebElement.clear()触发javascript更改事件 - 替代品?

Joh*_*lly 2 java selenium webdriver selenium-webdriver

我使用selenium IDE来初始记录测试并将它们保存为Java WebDriver测试.

当我进入输入字段,删除所有文本并输入新值时,它将其记录为2个命令:

driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("johnnyleitrim");
Run Code Online (Sandbox Code Playgroud)

这对我来说的一个问题是clear()事件触发"username"字段的Javascript更改事件.当我使用浏览器本身时不会发生这种情况 - 它会等到字段在触发更改javascript事件之前失去焦点,这就是我想在Selenium中模拟的内容.

我需要这个的原因是我对change()事件进行了验证,并且当使用空值调用change时,它会显示一条警告,告诉用户信息无效 - 此警报会停止Selenium

那么如何在不使用的情况下清除该字段WebElement.clear()

Fai*_*aiz 8

您可以避免使用该clear()方法并使用Actions该类一次清除和设置文本,因此onchange()仅在设置文本后触发事件.

调用以下方法,如:

ClearAndSetText(By.id("username"),"johnnyleitrim");
Run Code Online (Sandbox Code Playgroud)

该方法单击该元素,使用shift + home键选择现有文本,使用退格键清除,然后键入新文本 - 就像用户的操作一样.

public void ClearAndSetText(By by, string text)
{
    WebElement element = driver.findElement(by);
    Actions navigator = new Actions(driver);
    navigator.click(element)
        .sendKeys(Keys.END)
        .keyDown(Keys.SHIFT)
        .sendKeys(Keys.HOME)
        .keyUp(Keys.SHIFT)
        .sendKeys(Keys.BACK_SPACE)
        .sendKeys(text)
        .perform();
}
Run Code Online (Sandbox Code Playgroud)