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
@Melisandre: Podrzuć pełny komunikat błędu oraz fragment kodu który wchodzi w interakcje w nim.
Jeśli chodzi o visibility to jest ona sprawdzana na podstawie struktury DOM i jest kilka kryteriów:
visibility nie jest hidden
display nie jest 'none'
szerokość i wysokość musi być większa od zera

Nie wiem po czym lokalizujesz element, ale musisz się w pierwszej kolejności upewnić, że na pewno wskazujesz element, który chcesz. W obecnych technologiach frontendowych sporo
@venomik: Zrobiłam wycinek kodu, który za odpowiada. Wklejam jako zdjęcie.
Lokalizuję po tagu input i nazwie. Wchodzę na landingPage -> strona do logowania -> próba lokalizacji inputu - błąd element not visible. Dodam zdjęcie błędu w drugim komentarzu.

Zastanawia mnie to, że nad divem w którym znajduje się mój model jest div rodzic, który ma ustawione display:block. Może to mieć jakiś wpływ?
Melisandre - @venomik: Zrobiłam wycinek kodu, który za odpowiada. Wklejam jako zdjęci...

źródło: comment_ku2cpH5HrsQjMEHk7OY0PNMEYT86STPr.jpg

Pobierz
@Melisandre: Spróbuj wskazać element nie po tagName ale xpath uprzednio testując w przeglądarcę, czy xpath działa. Możliwe, że w źródle jest wcześniej inny element z tym tagName który jest przesłonięty przez modal - stąd błąd.
@Melisandre: Znalazłaś rozwiązanie? Masz pewność, że okno przeglądarki jest odpowiednio duże (chromeOptions.addArguments("window-size=1920x1080"))? Masz podgląd okna przeglądarki? Nie ma tam żadnego iframe'a? Zrób screena przeliczonych stylów dla elementu, z którym masz problem.
@Melisandre: Weź też pod uwagę, że funkcje "tagName" i "name" są statyczne, co oznacza w tym przypadku, że jest zwracany element jedynie poprzez to co zdefiniowałaś przy wywołaniu funkcji "name".
@qwerew: Gdyby chodziło o iframe to by otrzymałaby 'NoSuchElementException', ponieważ driver by tego elementu w ogóle nie mógł wykryć.
Rozmiar okna też nie pomoże, bo 'ElementNotVisibleException' nie sprawdza czy element jest wyświetlony w oknie, ale czy jest widoczny w DOMie.
Co najwyzej warto sobie do tego elementu w testach doscrollować bo się może okazać, że zmyślna funkcja frontendowa ustawia przezroczystość lub rozmiar na '0' gdy element jest niewidoczny w oknie i
@Melisandre: spróbuj najpierw znaleźć modal np
IWebelement = driver.FindElement(By.ClassName("nazwa klasy backgrounda w którym jest przycisk")
a następnie
wyszukaj przycisk zwyklym findElementem
Możesz też spróbować na innej przeglądarce, raz miałem element not visible na chromie a na firefoxie działało
(piszę w c# nie wiem jak to bedzie wyglądać u ciebie)