Przekroczono limit czasu na łączenie się z Chrome, ponawianie próby… błąd przy użyciu ChromeDriver 2.43 i Chrome przez Selenium
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
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
@Test
jako użytkownika innego niż root . - Zawsze wywołuj
driver.quit()
w ramachtearDown(){}
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
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);
}