一组逻辑相关的
当某个字段上的
我可以让线程休眠任意长的时间,但那看起来并不好。这只能猜测处理需要多长时间,并在慷慨的睡眠中浪费时间或拥有一个可能由于超时而中止的脚本之间进行选择。
是否有一种方法可以知道JavaScript代码(由
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
:___
注:
我在使用过程中遇到了一些问题,所以我认为值得简要记录一下学到的教训:
警告:不要混合使用隐式等待和显式等待。
除非您有非常特定的需求,否则请使用{{link2:
WebDriverWait
}}(FluentWait
的专业化版本)而不是FluentWait
。例如,WebDriverWait
默认忽略NotFoundException
(NoSuchElementException
的超类)。请参见建议。
jQuery.active
。之前不知道它。根据问题,它只能在执行代码是ajax调用时才起作用,我理解得对吗?是否有类似但适用于JavaScript的东西? - CamelCamelius