【发布时间】:2015-04-28 12:30:09
【问题描述】:
我有一个应该包含日期的输入字段。
假设表单在字段内加载了一个值,例如“2015 年 4 月 28 日”。我正在使用 webdriver 使用 By 选择元素,然后我这样做:
element.clear();
element.sendKeys("2015/04/29");
不幸的是,当我清除元素时,它会触发一些加载模板“yyyy/MM/dd”并将其放入字段中的 javascript,因此当 sendKeys() 出现时,最终结果是“yyyy/MM/dd2015 /04/29”。
当您手动执行这些步骤时不会发生这种情况,如果您转到该字段并选择其中的所有内容并将其删除,它不会加载模板直到您切换到不同的元素。
因此,javascript 似乎不仅是通过更改字段来触发的,而且还结合了诸如失去焦点之类的东西。我尝试了多种方法来关注输入元素:
new Actions(driver).moveToElement(element).perform();
new Actions(driver).moveToElement(element).click().perform();
element.click()
element.sendKeys("") // before the other sendKeys
然而,当我使用 webdriver 时,同样的事情不断发生。 所以两个问题:
- 您一般如何处理由您执行的操作触发但可能会影响您正在执行的操作的异步 javascript 调用?等等?
- 在这个特定问题中,它似乎是焦点驱动的,是否存在某种方式使该字段在 clear() 和 sendKeys() 之间失去焦点?
更新
详细说明:它是一个“文本”输入字段,在“更改”、“模糊”和“焦点”上运行一个 JavaScript 方法来更新字段值。
所以我运行element.clear(),它必须触发这三个之一,因为在清除后代码插入模板数据。
当我到达 element.sendKeys() 时,损坏已经完成。
因此,不知何故,在 clear() 和 sendKeys() 之间,网站上调用了“更改”、“模糊”或“焦点”,对我来说最合乎逻辑的解释是该字段以某种方式失去焦点。
【问题讨论】: