【发布时间】:2018-11-07 22:56:32
【问题描述】:
一组逻辑相关的input 字段有一个onchange 事件。在遍历字段并修改它们的值后,有些会正确更新,有些则不会,因为 onchange 事件所做的事情。
onchange 事件在字段上触发的那一刻,它开始一些处理(涉及其他相关字段),将值存储在某处并清除其他相关字段,如果它们之前没有被自己的 onchange 事件处理。
我可以让线程休眠任意时间,但这看起来不太好。这只是猜测将花费多少时间进行处理,并在浪费时间进行大量睡眠或拥有可以因超时而中止的脚本之间进行选择。
有没有办法知道 JavaScript 代码(由 onchange 事件调用)何时完成工作?
原码
Wait<WebDriver> wait = new WebDriverWait(driver, 25, 500);
for(int i = 1; i <= fieldCount; i++) {
elementId = "field$" + i;
wait.until(ExpectedConditions.elementToBeClickable(By.id(elementId)));
driver.findElementById(elementId).sendKeys(data);
//The mess happens if I don't sleep
Thread.sleep(3000);
}
输出
带睡眠:Field1:_w_ ... Field2:_x_ ... Field3:_y_ ... FieldN:_z_
不睡觉:Field1:_w_ ... Field2:___ ... Field3:_y_ ... FieldN:___
注意事项:
我在此过程中遇到了一些问题,所以我认为值得在简短的笔记中提及经验教训:
WARNING: 不要混合隐式和显式等待。
使用
WebDriverWait(FluentWait的特化)代替FluentWait,除非您有非常具体的要求。例如,WebDriverWait默认忽略NotFoundException(NoSuchElementException的超类)。见recomendation。
【问题讨论】:
标签: javascript java selenium events onchange