Possibile problema con Chromedriver 78, Selenium non riesce a trovare l'elemento web del PDF aperto in Chrome


17

Fino a quando il mio Google Chrome non è stato aggiornato alla versione 78 il mio codice ha funzionato bene. Ho anche aggiornato il chromedriver alla versione 78.0.3904.70. Quindi non sono più in grado di trovare WebElement con id = 'plugin' usando Selenium WebDriver e Java:

<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&amp;reanudar=&amp;>
</div>
</html>

A parte quella parte i miei test stanno funzionando bene. Non ho mai avuto un problema simile prima. Ho anche cercato di trovare WebElement id = 'content' ma sto ricevendo lo stesso errore.

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);

Il mio script di automazione dovrebbe trovare l'elemento PDF e scorrere la pagina verso il basso. Invece, sto ricevendo questo errore: org.openqa.selenium.TimeoutException: scaduto dopo 90 secondi in attesa della visibilità dell'elemento individuato da By.id: plugin

Qualcuno sta affrontando un problema simile? Grazie in anticipo.


Oggi ho eliminato Google Chrome versione 78 e installato la versione 76 e il mio test di automazione funziona di nuovo. Tutto funziona perfettamente. Spero che questo problema con la versione 78 sia risolto. Quindi stavo usando chromedriver (versione 78) e nel mio file .pom ho la seguente dipendenza: <dipendenza> <gruppoId> org.seleniumhq.selenium </groupId> <artifactId> selenium-chrome-driver </artifactId> <versione> 3.141.59 </version> </dependency>
Mix

Sto avendo lo stesso problema. Il codice che funzionava prima, ora non riesce perché il driver Web non riesce a individuare qualsiasi elemento Web che sto cercando di individuare. Le attese implicite ed esplicite falliscono allo stesso modo. Quello che non sono stato in grado di individuare è il tipo di elementi con cui ha problemi o se si tratta solo di componenti situati all'interno di un iframe. Per ovviare al problema, ho aggiunto Thread.sleepluoghi in cui avevo dovuto attendere implicitamente o esplicitamente prima di questo aggiornamento.
hfontanez,

Chrome 78 con chromedriver 77 funziona per me.
Yun

Risposte:


5

Ho riscontrato lo stesso problema.

Apparentemente Chrome si aggiorna automaticamente. Ieri (29 ottobre 19) il mio ChromeDriver ha iniziato a lamentarsi del fatto che non era compatibile con Chrome 78. Ho aggiornato il driver alla versione 78. Ho iniziato a ottenere eccezioni casuali org.openqa.selenium.NoSuchElementException quando ho cercato di trovare elementi che ho confermato fossero lì. FindElement [s] funziona anche quando ho usato i punti di interruzione. Ho anche provato ad aspettare implicitamente, con un successo limitato.

Ho provato la soluzione ChromeOption di zsbappa, ma senza gioia.

Google rende difficile ottenere le vecchie versioni di Chrome, ma ho trovato la versione 76 su https://www.neowin.net/news/google-chrome-76-offline-installer/ . Attenzione, il programma di installazione online installa l'ultima versione. Sono tornato al driver per 76 e tutto va bene. Tutti i miei test al selenio stanno funzionando di nuovo.

La mia conclusione è che il Chrome 78 e il suo pilota associato hanno una condizione di gara in cui Selenium tenta di interrogare la pagina web prima che sia completa.


Ho aperto il numero 3198 con gli sviluppatori di ChromeDriver.
wdtj,

1
Ho ricevuto la seguente risposta al mio problema: Grazie per aver segnalato questo problema. A partire dalla versione 77, Chromedriver non attende il caricamento di frame o iframe durante la navigazione in una nuova pagina o il passaggio da una finestra all'altra. Ciò introduce la necessità di attendere il codice affinché le risorse siano disponibili. La maggior parte dei binding ha un'attesa esplicita e le impostazioni di attesa implicita. Cerca WebDriverWait nella documentazione Selenium per ulteriori informazioni.
domenica

Ma stiamo usando attese esplicite e questo non aiuta. Aiuta a cambiare iframe ma i tag HTML non sono più visibili per pdf incorporato.
Mescola il

Ho aperto un nuovo numero sul gruppo chromedriver
Mix

Puoi utilizzare Chromium per i test, è una versione base di Chrome senza i servizi di Google, non si aggiorna da solo e funziona perfettamente con Chromedriver: chromium.org/getting-involved/download-chromium
Blaise

3

Abbiamo riscontrato un problema simile con Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.

Nei nostri test automatizzati su Python Selenium, abbiamo riscontrato numerosi errori in cui sembra che non si siano verificati clic sugli elementi. Ancora più strano, sembra che l'elemento sia diventato attivo (come se stesse per essere cliccato) ma l'evento di clic effettivo non si è mai verificato. Di conseguenza, non si verificano interruzioni di pagina ecc. Con conseguenti vari errori a valle.

Con un processo di trail ed errore, abbiamo scoperto che l'utilizzo della funzione standard .click () non è ora affidabile:

webdriver_element.click()

Ma l'utilizzo di Action Chains sembra essere affidabile:

ActionChains(context.browser).click(webdriver_element).perform()

Non è chiaro il motivo per cui questo è il caso. Gli errori sono iniziati non appena abbiamo eseguito l'aggiornamento a Chrome 78.0.3904.7. Stiamo usando Chromedriver 77.0.3865.90 ma gli stessi test passano in modo affidabile sulle versioni di Chrome 77.x quindi sembra che qualcosa non vada o sia cambiato in Chrome 78.


Questo mi ha aiutato parecchio, grazie.
Piedone,

1

Aggiungendo il seguente argomento ho risolto il mio problema.

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);

Ciao @zsbappa! Grazie per la risposta. Tuttavia, questo non risolve il mio problema. Il problema è che chromedriver (versione 78) non riesce a trovare alcun elemento web in pdf incorporato. Questa funzionalità ha funzionato bene fino a quando Google Chrome non è stato aggiornato alla versione 78. PS NON sto eseguendo i miei test in modalità senza testa
Mix

Non è chiaro come queste opzioni risolvano il problema dei PO.
Cal Corbin,

Questo non risolve il problema. Molto probabilmente, stai eseguendo scenari in cui l'elemento web non si trova all'interno di un iframe.
hfontanez,

1

Ho riscontrato lo stesso problema quando provavo ad accedere a una scheda all'interno di un iframe, funzionava bene sulla versione 76. Ora che si è aggiornato a 78, non riesce. Ho provato ad aspettare, ad aspettare implicitamente, a dormire, a localizzare gli elementi usando xpath, CSS, id, cambia contesto, scorri fino a visualizzare, ecc., Senza fortuna. Sto usando Windows 10, 1809. Non so se questo sta accadendo in altri sistemi operativi.

Ecco la domanda che ho sollevato:

Problema nell'utilizzo dei localizzatori chromedriver 78.0.3904.70


1

Ho confermato ieri che questo problema sembra manifestarsi solo quando un elemento è contenuto in un iframe. In questi casi, l'iframe si trova bene. Tuttavia, il tentativo di individuare un elemento Web utilizzando il driver o gli oggetti di attesa del driver Web comporta un NoSuchElemento TimeoutExceptionrispettivamente.

Ho fornito al team chromedriver un log dettagliato dei driver di Chrome e ci stanno lavorando.

AGGIORNAMENTO : dal numero chromedriver 3223

I registri mostrano che l'esecuzione finaleContextCreated per il frame non viene completata fino a quando FindElement non restituisce null. A partire dalla versione 77, ChromeDriver ha smesso di attendere il caricamento di tutti i frame prima di continuare la navigazione. Sfortunatamente, questa modifica ha impedito l'attesa per il caricamento del frame corrente. 3164 attenderanno tutti il ​​caricamento del frame corrente; questo dovrebbe impedire a FindElement di cercare fino a quando il frame non ha terminato il caricamento e viene creato l'esecuzioneContext.

Fondamentalmente, questo errore è stato introdotto in v.77. Molti di noi hanno appena notato questo problema perché siamo passati da v.76 a .v78. Si dice che stiano prendendo di mira una correzione per .v80 (non v. 79). Per ovviare al problema, sto usando Thread.sleeptra il momento in cui passo a iframe e quando tento di individuare il componente. Questa soluzione alternativa funziona bene. In effetti, puoi verificarlo da solo semplicemente eseguendo l'applicazione in modalità DEBUG. Quando metti in pausa l'esecuzione (utilizzando un punto di interruzione), noterai che il codice originale (senza sospensione) funziona correttamente.


0

Ad esempio: puoi provare a usare queste parole chiave !.

1. implicit_wait=10
2. Sleep  10

Ciao @Narasimhamurthy GN, grazie per la tua risposta. L'attesa esplicita non è un problema, sto usando le attese esplicite per tutti i miei test e non sto affrontando un problema simile. Il problema è che chromedriver (versione 78) non riesce a trovare alcun elemento web in pdf incorporato.
Mescola il

Per me alcuni casi di test ho anche riscontrato lo stesso problema per cui ho usato "geckodriver" (Firefox).
Narasimhamurthy GN

in caso contrario, utilizzare la parola chiave localizzatore di librerie di selenio diversa per trovare WebElement.
Narasimhamurthy GN

Sfortunatamente, si consiglia agli utenti della nostra applicazione Web di utilizzare Chrome o Internet Explorer, Firefox non è consigliato per qualche motivo. Ecco perché non posso usare Firefox per automatizzare i test. Ho provato a usare tutti i modi possibili per trovare qualsiasi elemento web in pdf usando il selenio ma non funziona. Ho anche provato a usare diversi dependencieds e chromedriver e niente funziona.
Mescola il


0

Ho avuto lo stesso problema.

Dopo l'aggiornamento automatico di Chrome con la versione 78.0, i miei script di test automatici non andavano a buon fine. Quindi ho aggiornato chromedriver alla versione 78, ma il driver non era ancora in grado di trovare alcun elemento web. Successivamente ho provato con più versioni di chromedriver e infine il mio problema è stato risolto con la versione 2.44 di chromedriver .

Questa versione è disponibile all'indirizzo https://chromedriver.storage.googleapis.com/index.html?path=2.44/


-1

È possibile Nuget gestore dei pacchetti, eliminare unità Chrome e la ricerca di Chrome, scaricare la nuova versione selenium.web.driver.ChromeDriver >> per jsaKamoto

lì trovi la versione cromata 78.


Grazie per la risposta, ma in realtà non risponde al problema delle eccezioni NoSuchElement nella versione 78 di Chrome.
wdtj
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.