我有一个使用 KnockoutJS 的应用程序,我正在尝试编写一些测试表单的测试。如果您不了解 KnockoutJS,简单来说就是它提供了从我的视图到我的数据模型的绑定。这意味着当我在输入字段中键入值时,我的基础对象会自动使用该输入字段值进行更新。默认情况下,这是通过更改事件完成的。
我遇到的问题是,当我的 WebDriver 测试在字段中输入时,更改事件没有触发,因此我的基础数据模型没有适当的值。这会导致我的表单验证在不应该失败时失败。
我已经完成了我在互联网上可以找到的一切来完成这项工作。我有:
- 发送 tab 键
- 点击离开表单域
- 发送 JavaScript 代码以触发焦点和模糊事件(在模糊时进行验证)
- 在输入之前单击表单域
- 设置等待只是以防这是一个时间问题
- 更改 KnockoutJS 以更新 afterkeydown 上的输入字段
这些都不适合我。
此外,我已经验证这不是事件冒泡问题,因为我明确删除了所有其他事件,只留下了 KnockoutJS 更改事件。
对于我正在寻找的解决方案,它适用于所有浏览器驱动程序(...至少是主要驱动程序,例如 IE、FF、Chrome、Safari),并且不需要使用 jQuery。
我该如何解决这个问题?
这是我用来在字段中输入值的相关代码:
// find element
WebElement input = this.element.findElement(By.className("controls"))
.findElement(By.tagName("input"));
// to set focus?
input.click();
// erase any existing value (because clear does not send any events
for (int i = 0; i < input.getAttribute("value").length(); i++) {
input.sendKeys(Keys.BACK_SPACE);
}
// type in value
input.sendKeys(text);
// to fire change & blur? (doesnt fire change)
//input.sendKeys(Keys.TAB);
// to fire change & blur? (doesnt fire change)
driver.findElement(By.tagName("body")).click();