我有一个应用程序正在使用KnockoutJS,我试图编写一些测试来测试表单。如果你不知道KnockoutJS,那么它的小故事就是它提供了从我的视图到我的数据模型的绑定。这意味着当我在输入字段中键入一个值时,我的基础对象会自动更新该输入字段值。这是通过默认情况下的更改事件完成的。WebDriver:更改事件未触发
我遇到的问题是,当我的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();
所以,如果我的理解,它更新'input'场与每个键中风? – Brian
请原谅我提出一个潜在的愚蠢问题,但当您在浏览器中手动与之交互时,问题页面是否正常工作?即如果您在浏览器中查看页面,请输入文本字段并在文本字段中输入标签,模型是否正在更新? – RodneyTrotter
@Brian输入字段由用户更新。当onchange事件触发时(至少应该这样),底层数据模型会更新为输入字段中的值。如果我更改数据模型中的基础值,输入字段将自动更新为新值。这全部由KnockoutJS提供。 – loesak