Nie wiem, czy to jest to, czego się spodziewasz, ale miałem trochę czasu na zbadanie i przyszedł mi z rozwiązaniem na pytanie: Z WatiN, Chciałbym czekać na wydarzenie jQuery.
Celem jest, aby pisać w C#:
Browser.WaitForEvent("#link", "onclick");
pisałem stronę testową (na http://www.sp4ce.net/debug.html), w którym to zdarzenie wyzwala onclick
na link po kliknięciu na przycisku.
Potem napisał metodę rozszerzenia .WaitForEvent
public static void WaitForEvent(this Browser browser, string selector, string eventname)
{
using (EventMonitorWatcher monitor = new EventMonitorWatcher(browser, selector, eventname))
{
int timeWaited = 0;
var maxTimeWait = Settings.WaitForCompleteTimeOut * 1000;
do
{
Thread.Sleep(Settings.SleepTime);
timeWaited += Settings.SleepTime;
}
while (!monitor.IsEventCalled() && timeWaited < maxTimeWait);
}
}
Metoda ta wykorzystuje to sprawdzić to zdarzenie zostało nazywany EventMonitorWatcher
.
public class EventMonitorWatcher : IDisposable
{
private readonly Browser _browser;
private readonly string _selector;
private readonly string _eventname;
public EventMonitorWatcher(Browser browser, string selector, string eventname)
{
_browser = browser;
_selector = selector;
_eventname = eventname;
_browser.Eval(string.Format("startEventMonitor('{0}', '{1}')", _selector, _eventname));
}
public bool IsEventCalled()
{
string result = _browser.Eval(string.Format(
"isEventCalled('{0}', '{1}')", _selector, _eventname));
return result == "true";
}
public void Dispose()
{
_browser.Eval(string.Format("stopEventMonitor('{0}', '{1}')", _selector, _eventname));
}
}
Monitor użycie trzech javascript (jQuery) Zasilanie metody, które rozpoczyna monitorowanie, zatrzymuje monitorowania i kontroli, jeśli zdarzenie zostało nazwane.
startEventMonitor = function(selector, event) {
$(selector).data('eventMonitorResult', false);
var eventMonitorHandler = function() {
$(selector).data('eventMonitorResult', true)
};
$(selector).data('eventMonitorHandler', eventMonitorHandler);
$(selector).bind(event, eventMonitorHandler);
};
stopEventMonitor = function(selector, event) {
$(selector).undbind(event, $(selector).data('eventMonitorHandler'));
$(selector).data('eventMonitorResult', false);
};
isEventCalled = function(selector, event) {
return $(selector).data('eventMonitorResult');
};
Tutaj musisz wstrzyknąć ten javascript jako ciąg twoją stronę po uruchomieniu przeglądarki.
[Test]
public void Test()
{
using(var browser = new IE("http://www.sp4ce.net/debug.html")
{
browser.Eval(JavaScript);
browser.WaitForEvent("#link", "onclick");
}
}
W tym teście, po kliknięciu przycisku "kliknij", test powinien zakończyć się bezpośrednio, a Twoja przeglądarka zostać zamknięta;
Co dokładnie chcesz zrobić? moje testy internetowych użył kodu jQuery, który jest wstrzykiwany na każdej stronie, to kod pozwalają rozszerzenia przeglądarki Watin z dwóch metod, po jednym dla selektora CSS i inny dla waitForAjaxComplete (które używane niektóre wiążące .AjaxStart i .AjaxStart na stronie jQuery). Jestem pewien, że mogę ci pomóc. Czy macie przykład tego, co chcecie zrobić po stronie WatiN? –
w jQuery, mam przedłużony ramy poprawności jQuery i mieć kilka wydarzeń, które chcą słuchać stronie serwera .... kiedy „validation.success” Zdarzenie w formie, chcę zrobić waitfor po stronie serwera który nasłuchuje tego zdarzenia, a kiedy to zrobi, sprawdź wyniki ... to samo dla "validation.failure" itp. To pozwoliłoby mi przetestować wyniki sprawdzania poprawności z perspektywy przeglądarki. Innym przykładem może być przywrócenie pewnych wyników adaptacyjnych jako JSON, a nie HTML. – Tracker1
Powyższe jest jednym z przykładów ... W Essense, chciałbym mieć kilka więzi podczas gdy przeglądarka jest otwarta, czekając na wydarzeniach z dochodzić ... wypowiedzi, które mogą być badane przed. Słuchanie zdarzeń opartych na jQuery. – Tracker1