Каков внутренний механизм механизма Selenium waitFor?

Я пытаюсь настроить поведение команды щелчка 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, или предложить предложения, как это можно сделать?

8
задан Chris Noe 17 November 2010 в 18:06
поделиться