Widzę to tylko w Chrome.
Pełny komunikat o błędzie brzmi:
„org.openqa.selenium.WebDriverException: Elementu nie można kliknąć w punkcie (411, 675). Inny element otrzymałby kliknięcie: ...”
Element, który „otrzyma kliknięcie”, znajduje się z boku tego elementu, a nie nad nim i nie nakładając się na niego, nie poruszając się po stronie.
Próbowałem dodać przesunięcie, ale to też nie działa. Element znajduje się w wyświetlonym oknie bez potrzeby przewijania.
google-chrome
selenium
selenium-webdriver
automated-tests
użytkownik1591169
źródło
źródło
Odpowiedzi:
Jest to spowodowane 3 następującymi typami:
1. Element nie jest widoczny do kliknięcia.
Użyj akcji lub JavascriptExecutor do kliknięcia.
Według działań:
Przez JavascriptExecutor:
lub
Następnie kliknij element.
2. Strona jest odświeżana przed kliknięciem elementu.
W tym celu poczekaj kilka sekund na stronie.
3. Element można kliknąć, ale na nim znajduje się pokrętło / nakładka
Poniższy kod będzie czekał, aż nakładka zniknie
Następnie kliknij element.
źródło
Możesz także użyć JavaScript i przewijanie nie byłoby wtedy wymagane.
źródło
actions.MoveToElement
nie działało dla mnie w języku C #, a inne rozwiązania przewijania wydawały się trochę kruche, ponieważ istniała szansa, że przewijanie może nieprawidłowo wyświetlić element lub pozycja elementu na stronie może się zmienić.Wygląda na to, że jest błąd w chromeedriver (problem polega na tym, że jest oznaczony jako nie można go naprawić) -> GitHub Link
( może wystawić nagrodę FreonsSponsors ?)
W komentarzu nr 27 zaproponowano obejście tego problemu. Może to zadziała dla ciebie
źródło
Miałem ten sam problem, wypróbowałem wszystkie oferowane rozwiązania, ale one nie działały dla mnie. ostatecznie użyłem tego:
Mam nadzieję że to pomoże
źródło
Widziałem to w sytuacji, gdy okno Chrome napędzane selenem było zbyt małe. Element, który ma zostać kliknięty, znalazł się poza oknem ekranu i dlatego nie działał.
To brzmi logicznie ... prawdziwy użytkownik musiałby albo zmienić rozmiar okna, albo przewinąć, aby można było zobaczyć element i faktycznie go kliknąć.
Po poleceniu sterownikowi selenu odpowiedniego ustawienia rozmiaru okna, te problemy zniknęły dla mnie. Interfejs API webdriver jest tutaj opisany .
źródło
Wow, wiele odpowiedzi tutaj i wiele dobrych.
Mam nadzieję, że dodam coś do tego z mojego doświadczenia.
No cóż, w moim przypadku nakładka na ciasteczko od czasu do czasu ukrywała element. Działa także przewijanie do elementu; ale moim skromnym zdaniem (w moim przypadku nie jest to panaceum dla wszystkich) najprostszym rozwiązaniem jest przejście na pełny ekran (uruchamiałem swoje skrypty na 3/4 okna ekranu)! Więc zaczynamy:
Mam nadzieję, że to pomaga!
źródło
ruby / watir-webdriver / chrome
Używam następującej sztuczki i wygląda na to, że to działa:
źródło
Ja również zmagałem się z tym problemem. Kod działa poprawnie w FF, awaria w Chrome. Starałem się kliknąć pole wyboru - jeśli nie było widoczne, przewijałem, aby wyświetlić, a następnie klikałem. Nawet przewijanie do widoku działa w Chrome, tylko kilka dolnych pikseli pola wyboru nie było widoczne, więc webdriver odmówił kliknięcia.
Moje obejście jest następujące:
Chrome ma również problemy z sendKeys, czasem użycie Akcji jest czasem konieczne. Oczywiście musisz wiedzieć, w którym kierunku i ile musisz iść, aby Twój przebieg mógł się różnić. Ale wolę to od hakowania javascript, więc zamieszczam to tutaj, na wypadek, gdyby ktoś inny uznał to za przydatne.
źródło
Ten błąd pojawiał się podczas uruchamiania testów bez użycia głowy za pomocą xvfb-run. Pracowali bezbłędnie lokalnie. Używając chrome, wersje webdriver / chromedriver / chrome / java itp. Są identyczne.
Błąd „nie naprawi” w chromeedriver - GitHub Link wskazany przez Tony'ego Lâmpada sugeruje, że może to być związane z tym, co jest / nie jest widoczne na ekranie.
Komunikat pomocy dla xvfb-run pokazuje następujące informacje:
Zmiana rozdzielczości dla xvfb sprawiła, że błąd zniknął:
źródło
Podczas używania Kątomierza pomogło mi to:
źródło
Najpierw spróbuj pobrać najnowszy sterownik Chrome i sprawdź, czy to rozwiązuje problem.
W moim przypadku nie rozwiązało to problemu. Ale do tej pory działało dla mnie następujące rozwiązanie. Poniżej znajduje się kod C #, ale możesz postępować zgodnie z tą samą logiką w swoim języku. To, co tu robimy, to
Krok 1: Skoncentruj się na elemencie za pomocą obiektu Selenium Actions,
Krok 2: Następnie kliknij element
Krok 3: Jeśli istnieje wyjątek, wywołujemy zdarzenie „Kliknięcie” javascript na elemencie, wykonując skrypt javascript za pomocą metody „ExecuteScript” sterownika przeglądarki Selenium.
Możesz także pominąć krok 1 i 2 i spróbować tylko krok 3. Krok 3 działałby sam, ale zauważyłem dziwne zachowanie w jednym scenariuszu, w którym krok 3, mimo że z powodzeniem kliknął element, spowodował nieoczekiwane zachowanie w innych częściach mojego kodu po kliknięciu elementu.
źródło
Zrobiłem tę metodę na podstawie komentarza z odpowiedzi Tony'ego Lâmpady. Pracuje bardzo dobrze.
źródło
Ten sam problem występował podczas uruchamiania skryptu selenu w Pythonie. Oto, co kliknąłem na element:
źródło
Miałem do czynienia z podobnym problemem, gdzie muszę zaznaczyć dwa pola wyboru jeden po drugim, ale otrzymywałem ten sam powyższy błąd. Wtedy dodałem czekać między krokami na sprawdzenie pól wyboru ... działa dobrze i świetnie. oto kroki: -
źródło
Musisz użyć fokusa lub przewinąć ten element. Być może będziesz musiał użyć opcji Explict wait.
LUB
Elementu nie można kliknąć ze względu na Spinner / Overlay na nim:
LUB
LUB
Jeśli nadal nie działa, użyj
JavascriptExecutor
źródło
Najwyraźniej jest to wynik błędu „nie naprawi” w pliku binarnym sterownika Chrome.
Jedno rozwiązanie, które zadziałało dla mnie (Nasz przebieg może się różnić), można znaleźć w tej dyskusji w Grupie dyskusyjnej Google, Komentarz nr 3:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc
Odpowiednia część znajduje się tutaj:
W moim przypadku używam Pythona, więc kiedy już dostałem pożądany element, po prostu go użyłem
Spodziewałbym się jednak, że zadziała to tylko, jeśli element, który próbujesz kliknąć, to link ...
źródło
Miałem ten sam problem z clj-webdriver (port clojure Selenium). Właśnie dla wygody przetłumaczyłem poprzednie rozwiązanie na clojure. Możesz wywołać tę funkcję przed kliknięciem lub czymkolwiek innym, aby uniknąć tego problemu.
źródło
Może się tak zdarzyć, jeśli element zmieni pozycję, gdy sterownik próbuje go kliknąć (widziałem to również w IE). Kierowca zachowuje pozycję początkową, ale zanim faktycznie ją kliknie, pozycja ta nie wskazuje już tego elementu. Sterownik FireFox nie ma tego problemu BTW, najwyraźniej programowo „klika” elementy.
W każdym razie może się to zdarzyć, gdy używasz animacji lub po prostu dynamicznie zmieniasz wysokość elementów (np
$("#foo").height(500)
.). Musisz upewnić się, że klikasz elementy dopiero po „ustaleniu” ich wysokości. Skończyło się na kodzie, który wygląda następująco (powiązania C #):W przypadku animacji lub innego czynnika, o który nie można łatwo zapytać, można zastosować metodę „ogólną”, która czeka na zatrzymanie się elementu:
źródło
Spotkałem się z tym, ponieważ okno dialogowe ładowania obejmuje ten element. Prosto rozwiązuję go, dodając oczekiwanie przed rozpoczęciem pracy z tym elementem.
Mam nadzieję, że to pomoże!
źródło
Objaśnienie komunikatu o błędzie :
Komunikat o błędzie mówi po prostu, że element, który chcesz kliknąć, jest obecny, ale nie jest widoczny. Może być przykryty lub tymczasowo niewidoczny.
Może być wiele powodów, dla których element nie jest widoczny w momencie testu. Ponownie przeanalizuj swoją stronę i znajdź odpowiednie rozwiązanie dla swojej sprawy.
Rozwiązanie dla konkretnego przypadku :
W moim przypadku ten błąd występuje, gdy podpowiedź elementu ekranu, który właśnie kliknąłem, wyskakiwała nad elementem, który chciałem kliknąć w następnej kolejności. Rozmycie było rozwiązaniem, którego potrzebowałem.
element.blur()
elementu wyskakującego z podpowiedzi, co spowodowałoby zniknięcie podpowiedzi.źródło
Przyczyną tego błędu jest to, że element, który próbujesz kliknąć, nie znajduje się w okienku ekranu (region widziany przez użytkownika) przeglądarki. Tak więc sposobem na pokonanie tego jest przewinięcie najpierw do żądanego elementu, a następnie kliknięcie.
JavaScript:
Jawa:
źródło
Odpowiedź Tony'ego Lâmpady, komentarz nr 27 rzeczywiście rozwiązał dla mnie problem, tyle że podał kod Java i potrzebowałem Pythona. Oto funkcja Pythona, która przewija do pozycji elementu, a następnie klika ją.
To rozwiązało problem dla mnie w Chrome 34.0. Nie spowodował żadnych szkód w Firefox 28.0 i IE 11; te przeglądarki nie podlegają problemowi, ale przewijanie do pozycji elementu przed kliknięciem nadal nie jest złe.
źródło
Może nie jest to naprawdę czyste rozwiązanie, ale działa:
źródło
Otrzymałem ten błąd, ponieważ przetestowałem najechanie kursorem, a następnie musiałem kliknąć link pod etykietką. Rozwiązaniem było dodanie
page.find('.sp-logo').hover
wcześniej,click_link
aby usunąć opis z drogi.źródło
To zabawne, przez cały czas, gdy szukałem różnych odpowiedzi, nikt nie próbował tego, co oczywiste, czego oczywiście nie miałem. Jeśli strona ma ten sam identyfikator użyty wiele razy, jak mój, („newButton”,), a ta, której szukasz, nie jest pierwszą znalezioną, najprawdopodobniej dostaniesz ten błąd. Najłatwiejszą rzeczą do zrobienia (C #):
Pamiętaj, że to FindElements, a nie FindElement.
Następnie sprawdź, ile wyników wróciło z pobierania. Jeśli jest to drugi, możesz użyć:
Lub uzyskaj, kto używał identyfikatorów, aby je naprawić.
źródło
.First(x => x.Visible)
dołącz do wywołania FindElements) i kliknięciu go, jeśli nie jest pusty.Po przetestowaniu wszystkich wymienionych sugestii nic nie działało. Zrobiłem ten kod. Działa, ale nie jest piękny
źródło
Robię coś w rodzaju brutalnej siły kliknięć i to działa dla mnie.
źródło
Jeśli
jQuery
załadowałeś stronę, możesz wykonać następujące polecenie javascript:Przykład użycia executora python:
źródło
Miałem ten sam problem i był spowodowany konfliktem identyfikatorów między div a łączem wewnątrz div. Więc kierowca klikał div zamiast linku, który chciałem. Zmieniłem identyfikator div i działało to poprawnie.
Przed:
Po:
źródło
W Drupal podczas korzystania z Selenium :
źródło