Wpis z mikrobloga

Mireczki proszę o poradę odnośnie #selenium i #testowanieoprogramowania.

Piszę testy logowania. Po przejściu na landingPage wchodzę w logowanie i wyświetla się modal z danymi do wpisania.
I tutaj pojawia się problem, ponieważ Selenium nie widzi go. Dostaję cały czas błąd: Element not visible.
Próbowałam:
1. zmieniać lokatory na różne sposoby, za każdym razem to samo,
2. wymusiłam czekanie 20 s. jakby czasem potrzebował więcej czasu na załadowanie - nie działa,
3. próbowałam driver.switchTo().activeElement(); oraz alert() - nie działa

Powoli zaczynają mi się kończyć pomysły. Miał ktoś podobny problem i może pomóc?
  • 35
  • Odpowiedz
@Melisandre: Dopiero teraz popatrzyłem na błąd, html nic nie da (prawdopodobnie). Selenium zwraca ElementNotVisibleException, więc element jest ewidentnie znaleziony, tylko go nie widzi. Opcji jest kilka:
- element jest faktycznie nie widoczny, bo np. modal ma animację na starcie która trwa na tyle długo, że selenium spróbuje go użyć zanim się pojawi - wtedy trzeba poczekać
- element jest domyślnie niewidoczny, ale zawsze jest w DOMie, po włączeniu modala zmienia się
  • Odpowiedz
@LiczbaPi: Uruchamiam testy po prostu przez komendę run w IntelliJ w Chromie. Konkretnie chodzi o stronę: https://www.buxfer.com/ tam na górze po prawej jest login i wyskakuje właśnie ten modal w którym są pola inputów do których próbuję się dostać, a których selenium nie widzi. Patrzyłam jak się zachowuje przeglądarka podczas wyskakiwania wyjątków i nic konkretnego się nie pojawia. Po prostu zawiesza się na chwilę i się wyłącza. Co do czekania to
  • Odpowiedz
@Melisandre: Problem był w tym co Ci wyżej pisali - element jest widoczny w DOM, ale nie jest widoczny na ekranie. Jak nie wiesz czy masz dobry selektor, to wklej go w przeglądarkę (w narzędzia programistyczne). Po wklejeniu dobrego selektora, element powinien się podświetlić.
  • Odpowiedz
@Melisandre: Jednak popatrzenie w HTML pomogło. Problemem jest to, że ta strona zawiera dwa formularze logowania, przy czym pierwszy z nich jest zawsze na stronie, tylko z atrybutem CSS: display: none; więc się nie wyświetla. Po kliknięciu na "Login" do drzewa DOM doklejany jest kolejny formularz, tyle, że tym razem już widoczny i to na nim chcemy operować. Tyle, że elementy w obu formularzach są identyczne więc szukając jednego z nich
  • Odpowiedz
@LiczbaPi: Tak, nie napisałem że to dobry selektor - Twój jest lepszy.
A co konsoli, można wklejać gotowe selektory w pole szukania - przynajmniej w Chrome w zakładce Elements
  • Odpowiedz