Я пытаюсь настроить поведение команды щелчка Selenium (через user-extentions.js), перехватывая вызовы doClick (локатор). Обычно мне нужно откладывать действия щелчка всякий раз, когда отображается «индикатор занятости» нашего приложения.
(Теперь стандартный ответ для такого рода вещей - вставить 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 на самом деле не выполняет никакого ожидания как такового, а скорее устанавливает условия для нее в цикле выполнения команды. И в этом случае команда click уже задействована, и я пытаюсь запустить команду внутри команды.
Может ли кто-нибудь пролить свет на то, как работает выполнение команд Selenium и работает waitFor, или предложить предложения, как это можно сделать?