Przekroczono limit czasu na łączenie się z Chrome, ponawianie próby… błąd przy użyciu ChromeDriver 2.43 i Chrome przez Selenium

Aug 16 2020

Szczerze mówiąc, nie jestem nawet pewien, co zrobić w tym momencie. Nie otrzymuję żadnych dzienników błędów w konsoli, tylko komunikaty rejestratora, które umieściłem w skryptach.

Kiedy docieram do wiersza kodu, w którym tworzę Dashboard Constructor, kończy test i deklaruje błąd, ostatnia zarejestrowana wiadomość zawsze brzmi „Zaraz zacznę szukać”

Nawet wypatroszyłem cały konstruktor (zakomentowałem cały kod, usunąłem parametr sterownika i po prostu umieściłem w nim instrukcję print) przed wysłaniem tego pytania i kiedy wywołałem metodę print w klasie, skrypt nie powiódł się w wierszu, w którym tworzenie konstruktor się zdarzył.

Nie rozumiem, co się dzieje. Mogę przeoczyć coś bardzo oczywistego. Otrzymuję błąd, ale niekoniecznie widzę konkretny komunikat o błędzie w konsoli.

Oto przypadek testowy, który próbuję uruchomić:

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

Oto mój pageObject 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();
        
        
    }
    
}

Błąd konsoli:

Odpowiedzi

DebanjanB Aug 16 2020 at 22:27

Ten komunikat o błędzie ...

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

... oznacza to, że używana kombinacja ChromeDriver / google-chrome nie jest najnowszą, ponieważ obecna implementacja ChromeDriver jest zgodna ze specyfikacjami WebDriver W3C i początkowymi dziennikami odzwierciedlają:

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 

Więc głównym problemem jest niezgodność między wersjami plików binarnych, których używasz w następujący sposób:

  • Używasz chromedriver = 2,43
  • Uwagi do wydania chromedriver = 2,43 wyraźnie wymienia następujące kwestie :

Obsługuje Chrome v69-71

  • Prawdopodobnie używasz najnowszego chrome = 84.0
  • Informacje o wydaniu ChromeDriver v84.0 wyraźnie zawierają następujące informacje:

Obsługuje Chrome w wersji 84

Istnieje więc wyraźna niezgodność między ChromeDriver v2.43 a przeglądarką Chrome v84.0


Rozwiązanie

Upewnij się, że:

  • JDK został zaktualizowany do obecnych poziomów JDK 8u251 .
  • Selenium jest aktualizowane do obecnych poziomów Wersja 3.141.59 .
  • ChromeDriver został zaktualizowany do aktualnego poziomu ChromeDriver v84.0 .
  • Chrome jest aktualizowany do aktualnego poziomu Chrome w wersji 84.0 . (zgodnie z informacjami o wersji ChromeDriver v84.0 )
  • Jeśli Twoja podstawowa wersja klienta WWW jest zbyt stara, odinstaluj ją i zainstaluj najnowszą wersję GA i wydaną wersję klienta WWW .
  • Oczyść swój projektu Workspace za pośrednictwem IDE i odbudować swój projekt z zaledwie wymaganych zależności.
  • Weź zrestartuj system .
  • Uruchom @Testjako użytkownika innego niż root .
  • Zawsze wywołujdriver.quit() w ramach tearDown(){}metody, aby z wdziękiem zamknąć i zniszczyć instancje WebDriver i Web Client .

Odniesienie

Kilka istotnych szczegółowych dyskusji można znaleźć w:

  • Próba sesji dwu-dialektycznej, zakładając, że prawo Postela obowiązuje na zdalnym końcu i wracam do oryginalnego OSS JSON przy użyciu ChromeDriver i Selenium
abracants Aug 16 2020 at 09:19

Myślę, że problem polega na tym, że sterownik nie został jeszcze zainicjowany w klasie DashBoard.

spróbuj rozszerzyć DashBoard do BaseClass.

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

}