Timeout durante la connessione a Chrome, nuovo tentativo in corso ... errore durante l'utilizzo di ChromeDriver 2.43 e Chrome tramite Selenium

Aug 16 2020

Onestamente non sono nemmeno sicuro di cosa fare a questo punto non ricevo alcun log degli errori nella console, ma solo i messaggi del logger che ho inserito negli script.

Quando arrivo alla riga di codice in cui creo Dashboard Constructor, termina il test e lo dichiara un errore, l'ultimo messaggio registrato è sempre "Sto cercando di iniziare a cercare"

Ho persino sventrato l'intero costruttore (ho commentato tutto il codice, rimosso il parametro del driver e ho semplicemente inserito un'istruzione print in esso) prima di pubblicare questa domanda e quando ho chiamato il metodo print all'interno della classe lo script non è riuscito nella riga in cui la creazione di il costruttore è successo.

Non capisco cosa stia succedendo, potrei perdere qualcosa di molto ovvio. Ottengo un errore ma non vedo necessariamente un messaggio di errore specifico nella console.

Ecco il test case che sto tentando di eseguire:

package com.symphio.testCases;
import java.util.concurrent.TimeUnit;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.symphio.pageObjects.Dashboard;
import com.symphio.pageObjects.loginSymphio;


public class TC_Dashboard_Search_002 extends BaseClass{

    
    @Test
    public void searchForTile() throws InterruptedException {
        
        logger.info("Connected to "+ baseURL);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                
        loginSymphio login = new loginSymphio(driver);
        //logs in
        login.setUserName(userName);
        logger.info("entered username");
        login.setPassWord(passWord);
        logger.info("entered password");
        login.pressSubmit();
        logger.info("button pressed");
        
        
        //searches for tile
        Thread.sleep(3000);


        logger.info("about to start looking");
        Dashboard dashboard = new Dashboard(driver);
        dashboard.mouseMover();
        logger.info("found Icon");
        dashboard.searchBarText(searchText);
        logger.info("input text");
        dashboard.tileClick();      
        logger.info("clicked");
                
    }
}

Ecco la mia pagina Oggetto DashBoard

package com.symphio.pageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class Dashboard {
    WebDriver driver;

    public Dashboard(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);     
        
    } 
        
    @FindBy(className="search-container")
    WebElement searchImg;
    
    @FindBy(xpath="//input[@type='search']")
    WebElement searchText;
    
    @FindBy(xpath="//input[contains(@class,'mat-card'), and contains(@class, 'mat-focus-indicator'), and contains(@class, 'arrangement-card')]")
    WebElement tileBox;
    
    
    Actions actions = new Actions(driver);

    public void mouseMover() {
    Actions mouseOverOnElement = actions.moveToElement(searchImg);
    mouseOverOnElement.perform();
    
    }
    
    public void searchBarText(String text) {
        searchText.sendKeys(text);
                
    }
    
    public void tileClick() {
        tileBox.click();
        
        
    }
    
}

Errore della console:

Risposte

DebanjanB Aug 16 2020 at 22:27

Questo messaggio di errore ...

...[WARNING]: Timed out connecting to Chrome, retrying...
...org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

... implica che ciò implica che la combinazione ChromeDriver / google-chrome che stai utilizzando non è quella recente poiché l'attuale implementazione di ChromeDriver segue le specifiche WebDriver W3C e i log iniziali riflettono:

Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Nov 05, 2019 3:41:53 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C 

Quindi il tuo problema principale è l' incompatibilità tra la versione dei binari che stai utilizzando come segue:

  • Stai usando chromedriver = 2.43
  • Le note di rilascio di chromedriver = 2.43 menzionano chiaramente quanto segue:

Supporta Chrome v69-71

  • Forse stai usando l'ultimo chrome = 84.0
  • Le note di rilascio di ChromeDriver v84.0 menzionano chiaramente quanto segue:

Supporta Chrome versione 84

Quindi c'è una chiara discrepanza tra ChromeDriver v2.43 e il browser Chrome v84.0


Soluzione

Assicurarsi che:

  • JDK è aggiornato ai livelli attuali JDK 8u251 .
  • Il selenio è aggiornato ai livelli attuali Versione 3.141.59 .
  • ChromeDriver viene aggiornato al livello corrente di ChromeDriver v84.0 .
  • Chrome viene aggiornato al livello corrente di Chrome versione 84.0 . (come da note sulla versione di ChromeDriver v84.0 )
  • Se la versione del client Web di base è troppo vecchia, disinstallarla e installare una versione GA recente e rilasciata di Web Client .
  • Pulisci l' area di lavoro del progetto tramite l' IDE e ricostruisci il tuo progetto solo con le dipendenze richieste.
  • Fai un riavvio del sistema .
  • Esegui il tuo @Testcome utente non root .
  • Invoca sempre il metodo driver.quit()all'interno tearDown(){}per chiudere e distruggere le istanze di WebDriver e Web Client in modo corretto .

Riferimento

Puoi trovare un paio di discussioni dettagliate pertinenti in:

  • Tentativo di una sessione bi-dialetto, supponendo che la legge di Postel sia vera all'estremità remota e tornando al JSON OSS originale utilizzando ChromeDriver e Selenium
abracants Aug 16 2020 at 09:19

Penso che il problema qui sia che il driver non è ancora inizializzato nella classe DashBoard.

prova ad estendere il DashBoard in BaseClass.

public class Dashboard extends BaseClass {
    
    public Dashboard(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);  

}