2011-07-26 8 views
10

Szukam biblioteki testowej dla javascript, która będzie działać w celu testowania interakcji użytkownika, takich jak przeciąganie i upuszczanie, zawieszanie, podwójne/pojedyncze kliknięcia i rysowanie na obszarze roboczym. Spojrzałem na kilka bibliotek, w tym jspec i jaśmin, ale oba wydają się być bardziej oparte na testowaniu jednostkowym.Testowanie zdarzeń javascript na wyższych poziomach

Jeśli przeoczyłem fakt, że którakolwiek z powyższych bibliotek wspiera takie testy, to chciałbym, aby taki przykład.

Edit


Więc zrobiłem dużo patrząc ostatniej nocy i naprawdę nie natknąć się niczym. Chciałbym, jeśli to możliwe, emulować interakcje użytkownika na wyższym poziomie niż coś takiego jak jaśmin, który jest stylem kapibary w tym sensie, że po prostu podrabia interakcję z domem.

Chciałbym bibliotekę, która faktycznie emuluje ruch myszką w dół -> ruch myszką -> mysz w górę.

Czy istnieje takie magiczne stworzenie?

Bounty post edit


Więc nadal eksperymentować z bibliotek JS testowania i jestem bardzo zadowolony z tego, jak funkcjonują one wokół pomocą HTML5 canvas. Wygląda na to, że na płótnie nie można testować wydarzeń w jaśminie, ponieważ jaśmin nie zainicjuje płótna.

Nie podoba mi się, że należy używać urządzeń "html" zamiast testować kod aplikacji. Wydaje się, że do tyłu, jeśli próbujesz zintegrować js ze swoją aplikacją. W przypadku testów specjalnych ma to sens, ale test BDD w ramach sieciowej wymagałby rzeczywistego wykorzystania widoków aplikacji do testowania.

Znowu taki potwór istnieje, czy moja głowa jest w chmurach?

+5

Czy próbowałeś Selenium lub Watr? –

+0

Użyłem Selenium, ale nie znam biblioteki selenu dla js, co jest dobre, po prostu przyzwyczaiłem się do sterowników internetowych, aby napędzać inne ramy testowe do przodu. Watr Właśnie próbowałem google i nie dostałem nic, więc link byłby fajny. Ty – austinbv

+0

Przepraszam, napisałem źle. http://watir.com/ –

Odpowiedz

2

Czy próbowałeś już PhantomJS lub ZombieJS? W szczególności słyszałam dobre rzeczy o Phantom.

=============

Kolejna propozycja: selen wtyczki/makr. www.seleniumwiki.com/selenium-rc/selenium-mousedownat-mousemoveat-and-mouseupat-example/ lub glauche.de/2009/09/09/drag-drop-with-selenium/.

0

Emulujący zachowanie użytkownika w JavaScript będzie wymagać, aby tworzyć własne Event Object s, wysyłając je na Element i modyfikowanie ich właściwości najważniejszą z nich są jednak tylko do odczytu w standardach zgodnych przeglądarek.

W IE 5+ wydają się być modyfikowane, ale to oczywiście wyklucza testowanie różnych przeglądarkach.

Więc nie sądzę, co masz na myśli to możliwe.


Edit: Myśląc o nim (i patrząc do dokumentacji dla Selen Firefoksa rozszerzenia), oczywiście będzie można napisać program JavaScript, który zgodnie z podanym harmonogramem będzie programowo utworzyć niestandardowe Event Object s które symulują zachowanie użytkownika.

Nie jestem jednak pewien, czy tak właśnie jest w przypadku Selenium, czy - co ważniejsze - czy jest to niezawodny sposób. Oznacza to również, że w zasadzie wykluczone zostało "faking interaction with the DOM".

Btw, pozwól mi uzyskać to poprawnie: więc zasadniczo potrzebujesz biblioteki JavaScript do testowania części JavaScript swojej aplikacji; ale chcesz również, aby działała na poziomie przeglądarki (nie na poziomie silnika DOM), tj. aby symulować prawdziwą interakcję użytkownika, tak jakby była przechwytywana przez przeglądarkę?

+0

Nie modyfikuj właściwości obiektów zdarzeń. Powinieneś zainicjować je wartościami właściwości, gdy po raz pierwszy zainicjujesz samo wydarzenie. na przykład e = document.createEvent ("UIEvent"); e.initMouseEvent (...). Ponadto zdarzenia działają na dowolnym węźle lub AbstractView (np. Dokumencie, oknie), a nie tylko na elementach. –

+0

@ Eli Gray: To właśnie tu mówię. Nie modyfikujesz ich. Będziesz jednak musiał, próbując tego, co OP chce zrobić. Twoja sekunda wydaje się trochę nieprecyzyjna: nie możesz zarejestrować "zdarzenia" na czymkolwiek innym niż "Element" (lub - z wyjątkami - 'AbstractView') ani nie możesz go wysłać. – FK82

+0

W jaki sposób rzeczy takie jak capybera i selinum rejestrują zdarzenia myszy w przeglądarce? – austinbv

-1

Przejdź i zobacz jQuery i Dojo. Możesz też wejść na stronę jsfiddle i rzucić okiem. Mają zestaw bibliotek i możesz testować online bez pobierania bibliotek.

+1

Nie myślisz o właściwym typie testów – austinbv

0

Po prostu pomyślnie przetestowałem kod, który wymagał zdarzeń myszy przy użyciu jaśminu i jQuery.

http://api.jquery.com/category/events/event-object/

Wystarczy utworzyć i zdarzenia wyzwalające, takie jak ten:

// Create a new jQuery.Event object with specified event properties. 
    var e = jQuery.Event("keydown", { keyCode: 64 }); 

    // trigger an artificial keydown event with keyCode 64 
    jQuery("body").trigger(e); 

Następnie użyj Jasmine, by sprawdzić właściwości. Podobnie jak uwaga, jeśli trzeba sprawdzić animacji, można drwić czas tak:

//http://groups.google.com/group/jasmine-js/browse_thread/thread/dbdc5ad1c1514322

beforeEach(function() { 
    jasmine.Clock.useMock(); 
}); 
//... call the code that calls setTimeout 
jasmine.Clock.tick(500); // advance 500 msec 
2

Widziałem jedyne dobre rozwiązanie tego problemu: DOH Robot. Działa aplet java, który pozwala emitować rzeczywiste zdarzenia javascript i emulować rzeczywiste zachowanie użytkownika (w tym testowanie metodą przeciągnij i upuść).

DOH nie zależy od dojo, więc można go używać w dowolnym projekcie. Niestety nie jest powszechnie stosowany, chociaż jest to naprawdę fajny framework testowy.

Powiązane problemy