我正在尝试通过拦截对 doClick(locator) 的调用来自定义 Selenium 的单击命令的行为(通过 user-extentions.js)。基本上,每当显示我们的应用程序的“忙碌指示器”时,我都需要延迟点击操作。
(现在这种事情的标准答案是在这些情况下在脚本中插入一个 waitFor 。事实上,我们目前在我们的脚本中有数以千计的它们。我正试图消除这些。)
检测页面元素是微不足道的部分。棘手的部分是让脚本真正等待。我看起来很有希望但失败的尝试如下所示:
var nativeClick = Selenium.prototype.doClick;
Selenium.prototype.doClick = function(locator) {
this.doWaitForCondition("!selenium.browserbot.findElementOrNull('busy-indicator')", 5000);
return nativeClick.call(this, locator);
}
doWaitForCondition 在每次点击之前被调用,但当条件评估为假时它不会等待。nativeClick 总是立即被调用,因此不会引入延迟。我怀疑 doWaitForCondition 函数本身实际上并没有做任何等待,而是在命令执行循环中为它建立了条件。在这种情况下,点击命令已经在发挥作用,我正在尝试在命令中运行命令。
有人可以阐明 Selenium 命令执行和 waitFor 的工作原理,或者提供有关如何完成的建议吗?