Dopóki mój Google Chrome nie został zaktualizowany do wersji 78, mój kod działał poprawnie. Zaktualizowałem również chromedriver do wersji 78.0.3904.70. Więc nie jestem już w stanie znaleźć WebElement z id = 'plugin' przy użyciu Selenium WebDriver i Java:
<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&reanudar=&>
</div>
</html>
Poza tą częścią moje testy działają dobrze. Nigdy wcześniej nie miałem podobnego problemu. Próbowałem także znaleźć identyfikator WebElement = „content”, ale otrzymuję ten sam błąd.
WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));
scrollvalid.sendKeys(Keys.PAGE_DOWN); scrollvalid.sendKeys(Keys.PAGE_DOWN);
Mój skrypt automatyzacji powinien znaleźć element PDF i przewinąć stronę w dół. Zamiast tego otrzymuję ten błąd: org.openqa.selenium.TimeoutException: Przekroczono limit czasu po 90 sekundach oczekiwania na widoczność elementu zlokalizowanego przez By.id: plugin
Czy ktoś ma podobny problem? Z góry dziękuję.
Thread.sleep
ten problem, dodawałem w miejscach, w których miałem domniemane lub jawne oczekiwania przed tą aktualizacją.Odpowiedzi:
Natrafiłem na ten sam problem.
Najwyraźniej Chrome sam się aktualizuje. Wczoraj (29 października 19) Mój ChromeDriver zaczął narzekać, że nie jest kompatybilny z Chrome 78. Zaktualizowałem sterownik do wersji 78. Zacząłem dostawać losowe wyjątki org.openqa.selenium.NoSuchElementException podczas próby znalezienia elementów, które potwierdziłem, że tam były. FindElement [s] działają również, gdy użyłem punktów przerwania. Próbowałem także ukrytych oczekiwań, ale z ograniczonym powodzeniem.
Próbowałem rozwiązania ChromeOption zsbappa, ale bez radości.
Google utrudnia uzyskanie starych wersji Chrome, ale znalazłem wersję 76 na https://www.neowin.net/news/google-chrome-76-offline-installer/ . Uwaga, instalator online instaluje najnowszą wersję. Wróciłem do sterownika za 76 i wszystko jest w porządku. Wszystkie moje testy selenu znów działają.
Doszedłem do wniosku, że Chrome 78 i powiązany z nim sterownik są w stanie wyścigu, w którym Selenium próbuje przesłuchać stronę internetową przed jej ukończeniem.
źródło
Napotkaliśmy podobny problem z Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.
W naszych automatycznych testach Pythona Selenium widzieliśmy wiele awarii, w których wydaje się, że nie wystąpiły kliknięcia elementów. Co dziwniejsze, wydaje się, że element stał się aktywny (jakby miał zostać kliknięty), ale rzeczywiste zdarzenie kliknięcia nigdy nie miało miejsca. W rezultacie przełączenia stron itp. Nie występują, powodując różne awarie niższego szczebla.
W wyniku procesu śledzenia i błędów stwierdziliśmy, że użycie standardowej funkcji .click () nie jest teraz niezawodne:
Ale używanie Łańcuchów działań wydaje się niezawodne:
Nie jest jasne, dlaczego tak jest. Awarie rozpoczęły się, gdy tylko zaktualizowaliśmy Chrome do wersji 78.0.3904.7. Używamy Chromedriver 77.0.3865.90, ale te same testy przebiegają niezawodnie w wersjach Chrome 77.x, więc wydaje się, że coś jest nie tak lub zmieniło się w Chrome 78.
źródło
Dodając następujący argument, rozwiązałem mój problem.
źródło
Napotkałem ten sam problem, gdy próbowałem uzyskać dostęp do karty w ramce iframe, wcześniej działała dobrze w wersji 76. Teraz, gdy zaktualizowała się do 78, nie działa. Próbowałem czekać, ukryte oczekiwania, spać, zlokalizować elementy za pomocą xpath, CSS, id, zmienić kontekst, przewijać do widoku itp., Bez powodzenia. Korzystam z systemu Windows 10, 1809. Nie wiem, czy dzieje się tak w innym systemie operacyjnym.
Oto pytanie, które postawiłem:
Problem z użyciem lokalizatorów chromedriver 78.0.3904.70
źródło
Potwierdziłem wczoraj, że ten problem pojawia się tylko wtedy, gdy element jest zawarty w ramce iframe. W takich przypadkach element iframe znajduje się w porządku. Jednak próba zlokalizowania elementu WWW za pomocą sterownika lub obiektów oczekiwania sterownika sieci spowoduje odpowiednio
NoSuchElement
lubTimeoutException
.Dostarczyłem zespołowi chromedriver pełny dziennik sterowników chrome i oni nad tym pracują.
AKTUALIZACJA : Od wydania chromedriver 3223
Zasadniczo ten błąd został wprowadzony w wersji 77. Wielu z nas właśnie zauważyło ten problem, ponieważ zaktualizowaliśmy wersję v.76 do .v78. Mówi się, że mają na celu naprawienie .v80 (nie v. 79). Aby obejść ten problem, używam
Thread.sleep
między czasem przełączania się na ramkę iframe a próbą zlokalizowania komponentu. To obejście działa dobrze. W rzeczywistości możesz to sprawdzić samodzielnie, po prostu uruchamiając aplikację w trybie DEBUG. Po wstrzymaniu wykonywania (przy użyciu punktu przerwania) zauważysz, że oryginalny kod (bez uśpienia) działa dobrze.źródło
Na przykład: możesz spróbować użyć tych słów kluczowych!
źródło
Okazało się, że jest to problem z Google Chrome, a nie chromedriver: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211
źródło
Miałem ten sam problem.
Po automatycznej aktualizacji Chrome do wersji 78.0 moje automatyczne skrypty testowe zawiodły. Zaktualizowałem więc chromedriver do wersji 78, ale sterownik nadal nie mógł znaleźć żadnego elementu WWW. Potem próbowałem z wieloma wersjami chromeedriver i wreszcie mój problem został rozwiązany w wersji chromedriver 2.44 .
Ta wersja jest dostępna na https://chromedriver.storage.googleapis.com/index.html?path=2.44/
źródło
Możesz menedżera pakietów Nuget , usunąć dysk Chrome i wyszukać Chrome, pobrać nową wersję selenium.web.driver.ChromeDriver >> dla jsaKamoto
tam znajdziesz chromowaną wersję 78.
źródło