Обновление: я использую тот же метод (wrapRequest) таким же образом с Selenium2, и он все еще работает.Разница лишь в том, что я не использую расширение пользователя.Я просто выполняю javascript для запроса кода, который загружен JSP.
Вот что мы в итоге сделали.(Обратите внимание, что есть более простые способы получить, если Ajax-вызов выполняется, если вы всегда используете только один фреймворк, такой как JQuery. Нам пришлось немного подстроить это, потому что у нас есть несколько страниц, использующих JQuery, и множествоиспользуйте GWT)
Я создал файл Javascript, который загружается на каждой странице, только если вы тестируете.(Я сделал это, включив фрагмент в шаблон нашего JSP: если параметр строки запроса тестирования передается как true, установите cookie. Если этот cookie установлен, включите файл javascript) Этот файл javascript по существу оборачивает объект XMLHttpRequest, чтобы вести подсчетиз всех запросов на отправку:
function wrapRequest(xmlRequest) {
var oldSend = xmlRequest.prototype.send;
xmlRequest.prototype.send = function() {
var oldOnReady = this.onreadystatechange;
oldOnReady = function() {
oldOnReady.apply(this, arguments);
// if call is complete, decrement counter.
}
// increment counter
if(oldSend.apply)
oldSend.apply(this, arguments);
else if (oldOnReady.handleEvent) { //Firefox sometimes will need this
oldOnReady.handleEvent.apply(this, arguments);
}
}
}
Это немного больше, чем это, если async == false, но это должно быть достаточно легко выяснить.
Затем я добавил функциюв файл selenium user-extensions.js, который выглядит просто так:
Selenium.prototype.getIsNetworkReady = function() {
if(this.browserbot.topWindow.isNetworkReady) { //sometimes this method is called before the page has loaded the isNetworkReady function
return this.browserbot.topWindow.isNetworkReady();
}
return false;
}
Также обратите внимание на проверку topWindow: это связано с тем, что при выборе iframe возникают проблемы.
Такжевам придется вызывать метод wrapRequest для объекта XMLHttpRequest каждого загружаемого iFrame.Я делаю это прямо сейчас, используя: document.addEventListener("DOMNodeInserted", onElementAdded, true);
, а затем в onElementAdded я просто беру iframe, когда он загружается, и передаю объект XMLHttpRequest.но это не работает в IE, поэтому я ищу альтернативу.Если кто-нибудь знает лучший способ сделать это так, чтобы он работал как в IE, так и в FF, я бы хотел услышать это.
В любом случае, это суть реализации.Надеюсь, это поможет кому-нибудь в будущем.