Używam API Selenium 2 Java z FirefoxDriver. Kiedy wypełniam formularz, na stronie są dodawane pola wyboru w zależności od danych wejściowych formularza.
Chciałbym zasymulować kliknięcie tych pól wyboru przy użyciu Selenium. Element jest widoczny i można go używać w zwykłej przeglądarce, ale selen zapewnia, że elementy nie są widoczne.
"Element is not currently visible and so may not be interacted with"
Czy mogę zmusić selen do ignorowania niewidocznego stanu pierwiastków? Jak zmusić Selenium do interakcji z niewidocznym elementem?
java
selenium-webdriver
djondal
źródło
źródło
Odpowiedzi:
Selenium określa, czy element jest widoczny lub nie, według następujących kryteriów (użyj inspektora DOM, aby określić, jaki CSS ma zastosowanie do Twojego elementu, upewnij się, że spojrzysz na styl obliczeniowy):
Twój element spełnia jedno z tych kryteriów. Jeśli nie masz możliwości zmiany stylu elementu, oto jak możesz to na siłę zrobić za pomocą javascript (zakładając WebDriver, skoro powiedziałeś Selenium2 API):
Ale to nie uruchomi zdarzenia javascript, jeśli polegasz na zdarzeniu change dla tego wejścia, musisz je również uruchomić (na wiele sposobów, najłatwiej jest użyć dowolnej biblioteki javascript załadowanej na tej stronie).
Źródło kontroli widoczności -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
Specyfikacja WebDriver, która to definiuje -
https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#widl-WebElement-isDisplayed-boolean
źródło
Czasami oznacza to, że na stronie znajduje się wiele elementów, które mają tę samą właściwość, według której szukasz, i „rozmawiasz z niewłaściwym”.
Jeśli Twojego elementu nie można jednoznacznie zidentyfikować za pomocą: id lub: name (lub: class), może to być trudne.
Czasami wyszukiwanie elementu przez: xpath pomoże, aw niektórych przypadkach nawet to nie jest praktyczne.
W takich przypadkach może być konieczne pobranie wszystkich elementów, które pasują do twoich kryteriów i odwołanie się do właściwego przez indeks. Jest brudny, ale działa.
Używam Selenium / Watir z aplikacji Ruby on Rails, więc w moim przypadku przykładem będzie:
Mam nadzieję że to pomoże.
źródło
Miałem podobny problem, ale był związany z niewidocznym elementem w widoku. Zrobiłem zrzut ekranu i zdałem sobie sprawę, że okno przeglądarki jest zbyt wąskie i element nie jest widoczny. Zrobiłem jedno z tych i zadziałało:
Zobacz: WebDriver.maximize_window ()
źródło
Lub możesz użyć klasy działania Selenium do symulacji interakcji użytkownika - na przykład
źródło
Jest też inny przypadek, w którym widoczny element zostanie rozpoznany jako niewidoczny:
Aby sprawdzić, czy element, z którym nie chcesz wchodzić w interakcje, jest przekształcony w CSS, na CHROME zrób to:
źródło
Niewidzialność może również wynikać z czasu, w którym element ma się powoli pojawiać. W takim przypadku pomocne może być zmuszenie przeglądarki do trochę czasu.
Zobacz na przykład pytanie o pozwolenie WebDriverowi na czekanie, aż pojawi się element .
źródło
Miałem ten sam problem z selenem 2 w Internet Explorerze 9, ale moja poprawka jest naprawdę dziwna. Nie udało mi się kliknąć wejść w moim formularzu -> powtórzenia selenu, ich nie widać.
Wystąpiło, gdy moja forma miała zakrzywione cienie -> http://www.paulund.co.uk/creating-different-css3-box-shadows-effects : w konkretnym „Effect no. 2”
Nie mam pojęcia, dlaczego i jak to rozwiązanie pseudoelementowe zatrzymało testy selenu, ale dla mnie działa.
źródło
Nie możesz wymusić dostępu / zmiany elementu, do którego użytkownik normalnie nie ma dostępu, ponieważ Selenium jest zaprojektowane tak, aby naśladować interakcję użytkownika.
Jeśli wystąpi ten błąd, sprawdź, czy:
maximize()
w node.js ,maximize_window()
w Pythonie),executeScript()
w node.js ,execute_script()
w Pythonie).źródło
Po prostu rozwiązuję ten błąd podczas używania kapibary w projekcie ror dodając:
do
features/support/env.rb
.źródło
Po prostu rozwiązuję ten błąd, czekając na właściwość wyświetlania elementu
źródło
Dostaję się do wyjątku ElementNotVisibleException używając selenu do testów funkcjonalnych na stronie django z glifami bootstrap jako linkami w szablonach, jak:
Podczas moich testów funkcjonalnych styl bootstrap nie jest ładowany, wtedy próba kliknięcia takich linków spowoduje zgłoszenie wyjątku ElementNotVisibleException. Udaje mi się je kliknąć, dodając spację w tagu, na przykład:
źródło
Na tej stronie jest wiele dobrych odpowiedzi.
Oba są omówione w różnych szczegółach powyżej. Odpowiedź, której nie widziałem, to ScrollToElement. Wygląda na to, że przetwarzasz listę elementów, podczas gdy tworzysz więcej elementów, pól wyboru. Może to spowodować przeniesienie elementów na liście poza widoczną stronę. Czasami można zobaczyć element gołym okiem, ale po prostu nie można go kliknąć. Podczas przetwarzania list czasami trzeba przerwać przewijanie.
Ponieważ natknąłem się na to, utworzyłem PageScroll.java i umieściłem tam moje skrypty przewijania. Oto kilka metod z tej klasy:
zobacz Przewijanie elementu do widoku za pomocą Selenium, aby uzyskać więcej przykładów
źródło
Przyjęta odpowiedź zadziałała dla mnie. Poniżej znajduje się kod, aby znaleźć element nadrzędny, który sprawia, że Selenium uważa, że jest niewidoczny.
źródło
Aby dodać tutaj moje ziarno piasku: jeśli element znajduje się za stałym elementem div, zostanie uznany za niewidoczny i nie będzie można go kliknąć; zdarzyło mi się to niedawno i rozwiązałem to, wykonując skrypt zgodnie z powyższymi zaleceniami, który robi:
źródło