Se agotó el tiempo de conexión a Chrome, volviendo a intentarlo ... error al usar ChromeDriver 2.43 y Chrome a través de Selenium

Aug 16 2020

Honestamente, ni siquiera estoy seguro de qué hacer en este momento. No obtengo ningún registro de error en la consola, solo los mensajes del registrador que puse en los scripts.

Cuando llego a la línea de código donde creo el Constructor del tablero, finaliza la prueba y la declara una falla, el último mensaje registrado es siempre "A punto de comenzar a buscar"

Incluso destruí todo el constructor (comenté todo el código, eliminé el parámetro del controlador y simplemente puse una declaración de impresión) antes de publicar esta pregunta y cuando llamé al método de impresión dentro de la clase, el script falló en la línea donde la creación de el constructor sucedió.

No entiendo lo que está pasando, podría estar perdiendo algo muy obvio. Recibo un error, pero tampoco veo necesariamente un mensaje de error específico en la consola.

Aquí está el caso de prueba que estoy intentando ejecutar:

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

Aquí está mi página de 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();
        
        
    }
    
}

Error de consola:

Respuestas

DebanjanB Aug 16 2020 at 22:27

Este mensaje de error ...

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

... implica que implica que el combo ChromeDriver / google-chrome que está utilizando no es el más reciente, ya que la implementación actual de ChromeDriver sigue las especificaciones de WebDriver W3C y los registros iniciales reflejan:

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 

Entonces, su problema principal es la incompatibilidad entre la versión de los binarios que está utilizando de la siguiente manera:

  • Estás usando chromedriver = 2.43
  • Las notas de la versión de chromedriver = 2.43 mencionan claramente lo siguiente:

Soporta Chrome v69-71

  • Posiblemente esté utilizando el último chrome = 84.0
  • Las notas de la versión de ChromeDriver v84.0 mencionan claramente lo siguiente:

Soporta Chrome versión 84

Por lo tanto, existe una clara discrepancia entre ChromeDriver v2.43 y el navegador Chrome v84.0


Solución

Asegurarse de que:

  • JDK se actualiza a los niveles actuales JDK 8u251 .
  • Selenium se actualiza a los niveles actuales Versión 3.141.59 .
  • ChromeDriver se actualiza al nivel actual de ChromeDriver v84.0 .
  • Chrome se actualiza al nivel actual de la versión 84.0 de Chrome . (según las notas de la versión de ChromeDriver v84.0 )
  • Si la versión base de Web Client es demasiado antigua, desinstálela e instale una GA reciente y una versión publicada de Web Client .
  • Limpie su área de trabajo del proyecto a través de su IDE y reconstruya su proyecto solo con las dependencias requeridas.
  • Realice un reinicio del sistema .
  • Ejecute su @Testcomo usuario no root .
  • Invoque siempre driver.quit()dentro del tearDown(){}método para cerrar y destruir las instancias de WebDriver y Web Client correctamente.

Referencia

Puede encontrar un par de discusiones detalladas relevantes en:

  • Intentando una sesión de bi-dialecto, asumiendo que la ley de Postel es cierta en el extremo remoto y volviendo a OSS JSON original usando ChromeDriver y Selenium
abracants Aug 16 2020 at 09:19

Creo que el problema aquí es que el controlador aún no se ha inicializado en la clase DashBoard.

intente extender DashBoard a BaseClass.

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

}