2009-07-29 13 views
5

Próbuję przetestować za pomocą QTP aplikację internetową, która używa ajax4jsf do implementacji funkcji ajax. QTP nie jest w stanie rozpoznać, kiedy ajax skończył. Przeczytałem, że zestaw narzędzi do rozbudowy sieci dostarczany z QTP 9.5 i QTP 10 jest rozwiązaniem mojego problemu. Nie mogę jednak zrozumieć, w jaki sposób to może mi pomóc: muszę znać stan gotowości obiektu httpRequest i kontynuować test, gdy stan jest "ukończony". Ale nie wiem, jak dotrzeć do httpRequest z zestawu narzędzi do rozszerzenia sieci. Każda pomoc będzie doceniona.QTP Web extensibilty toolkit i ajax

Odpowiedz

2

Dziękuję za odpowiedzi.

Udało nam się rozwiązać nasz problem za pomocą zestawu narzędzi QTP Extensibilty: A4j używa kolejki słuchaczy, które budzą się przed i po ajax (w zależności od typu słuchacza). W naszym rozwiązaniu zaimplementowaliśmy funkcję Jscript dla każdego komponentu ajax (np. WebButton):
1. Inicjalizuj zmienną globalną na 0
2.rejestruje nową funkcję jako słuchacz typu onafterajax:

_elem.ownerDocument.parentWindow.A4J.AJAX.AddListener({ 
     onafterajax: function(req, event, data) { 
      globalVariable = 1; 
     } 
    }); 
  1. Kliknij przycisk
  2. iść do pewnego rodzaju pętli zajęty oczekujących:

    while (globalVariable != 1) { 
        _util.Wait(250); 
    } 
    

Funkcja, którą zarejestrowaliśmy, jest wywoływana, gdy ajax jest zakończony i zmienia globalną zmienną tak, że pętla while zostanie zakończona. Wiem, że to jest brzydkie, ale działa świetnie.

Naszym jedynym problemem jest to, że QTP 10 implementuje _util.wait, a QTP 9.5 nie. Bez czekania przeglądarka utknie w nieskończonej pętli, a zarejestrowana funkcja nigdy nie zostanie wywołana. Jakiekolwiek rozwiązanie dotyczące implementacji nieprzygotowanego oczekiwania w Jscript byłoby najbardziej docenione.

2

Na podstawie mojego doświadczenia z testami automatyzacji dla aplikacji sieciowej z połączeniami AJAX sugeruję, aby rozważyć następujące kwestie.

  1. Object Recognition mechanizm QTP za poszukuje GUI obiektów z systemu Windows uchwyt. W miarę możliwości używaj tylko obiektów GUI. Testowanie ręczne nie dotrze do obiektu XmlHttpRequest, ale nie przeszkodzi Ci w testowaniu funkcjonalnym. Możesz nadal synchronizować różne zdarzenia w oparciu o zmianę właściwości obiektów GUI. Na przykład. "ładowanie ..." obraz lub tekst pojawił się/zniknął. Lista rozwijana przestała dodawać nowe elementy. Przycisk staje się włączony/wyłączony.

  2. Jeśli jest to Twoja aplikacja wewnętrzna, możesz opracować bardziej przyjazne wsparcie dla QTP, a tutaj możesz korzystać z przewodników z pakietu narzędzi do rozszerzania. Dodatkowo, jako opcję kompilacji testowej możesz dołączyć obiekt GUI (niewidoczny obraz lub element tekstowy) i użyć go do wskazania stanów transakcji AJAX.

  3. Wreszcie, nadal możesz uzyskać dostęp do DOM bezpośrednio, aby dotrzeć do obiektów innych niż GUI, chociaż nie mam w ten sposób informacji o używaniu obiektu XmlHttpRequest.

Dziękuję Albert Gareev

Powiązane problemy