Tempo limite esgotado ao conectar ao Chrome, tentando novamente… erro usando ChromeDriver 2.43 e Chrome por meio do Selenium

Aug 16 2020

Sinceramente, nem tenho certeza do que fazer neste ponto, não estou obtendo nenhum log de erro no console, apenas as mensagens do logger que coloquei nos scripts.

Quando chego à linha de código onde crio o Dashboard Constructor, ele termina o teste e o declara uma falha, a última mensagem registrada é sempre "Prestes a começar a procurar"

Eu até mesmo destruí todo o construtor (comentei todo o código, removi o parâmetro do driver e apenas coloquei uma instrução print nele) antes de postar esta pergunta e quando chamei o método print dentro da classe, o script falhou na linha onde a criação de o construtor aconteceu.

Não entendo o que está acontecendo, posso estar faltando algo muito óbvio. Recebo falha, mas também não necessariamente vejo uma mensagem de erro específica no console.

Aqui está o caso de teste que estou tentando executar:

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

Aqui está o meu DashBoard pageObject

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

Erro de console:

Respostas

DebanjanB Aug 16 2020 at 22:27

Esta mensagem de erro ...

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

... implica que o combo ChromeDriver / google-chrome que você está usando não é o recente, pois a implementação atual do ChromeDriver segue as especificações WebDriver W3C e os logs iniciais refletem:

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 

Portanto, seu principal problema é a incompatibilidade entre a versão dos binários que você está usando da seguinte maneira:

  • Você está usando chromedriver = 2,43
  • Notas de versão de chromedriver = 2,43 menciona claramente o seguinte:

Compatível com Chrome v69-71

  • Possivelmente, você está usando o chrome = 84.0 mais recente
  • As notas de versão do ChromeDriver v84.0 mencionam claramente o seguinte:

Suporta Chrome versão 84

Portanto, há uma incompatibilidade clara entre o ChromeDriver v2.43 e o navegador Chrome v84.0


Solução

Garanta que:

  • O JDK foi atualizado para os níveis atuais JDK 8u251 .
  • O Selenium foi atualizado para os níveis atuais Versão 3.141.59 .
  • O ChromeDriver é atualizado para o nível atual do ChromeDriver v84.0 .
  • O Chrome é atualizado para o nível atual da versão 84.0 do Chrome . (de acordo com as notas de versão do ChromeDriver v84.0 )
  • Se sua versão base do Web Client for muito antiga, desinstale-a e instale um GA recente e uma versão lançada do Web Client .
  • Limpe a área de trabalho do projeto por meio do IDE e reconstrua o projeto apenas com as dependências necessárias.
  • Faça uma reinicialização do sistema .
  • Execute seu @Testcomo usuário não root .
  • Sempre invoque driver.quit()dentro do tearDown(){}método para fechar e destruir as instâncias do WebDriver e do Web Client normalmente.

Referência

Você pode encontrar algumas discussões detalhadas relevantes em:

  • Tentativa de sessão bi-dialeto, supondo que a Lei de Postel seja válida na extremidade remota e voltando ao OSS JSON original usando ChromeDriver e Selenium
abracants Aug 16 2020 at 09:19

Acho que o problema aqui é que o driver ainda não foi inicializado na classe DashBoard.

tente estender o DashBoard em BaseClass.

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

}