Zeitüberschreitung beim Herstellen einer Verbindung zu Chrome, erneuter Versuch… Fehler bei Verwendung von ChromeDriver 2.43 und Chrome über Selenium
Ich bin mir ehrlich gesagt nicht einmal sicher, was ich zu diesem Zeitpunkt tun soll. Ich erhalte keine Fehlerprotokolle in der Konsole, nur die Logger-Nachrichten, die ich in die Skripte eingefügt habe.
Wenn ich zu der Codezeile komme, in der ich den Dashboard-Konstruktor erstelle, wird der Test beendet und als Fehler deklariert. Die letzte protokollierte Nachricht lautet immer "Kurz vor der Suche".
Ich habe sogar den gesamten Konstruktor entkernt (den gesamten Code auskommentiert, den Treiberparameter entfernt und einfach eine print-Anweisung eingefügt), bevor ich diese Frage gestellt habe. Als ich die print-Methode innerhalb der Klasse aufrief, schlug das Skript in der Zeile fehl, in der die Erstellung von erstellt wurde Der Konstruktor ist passiert.
Ich verstehe nicht, was los ist. Mir könnte etwas sehr Offensichtliches fehlen. Ich erhalte einen Fehler, sehe aber auch nicht unbedingt eine bestimmte Fehlermeldung in der Konsole.
Hier ist der Testfall, den ich ausführen möchte:
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");
}
}
Hier ist mein 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();
}
}
Konsolenfehler:

Antworten
Diese Fehlermeldung ...
...[WARNING]: Timed out connecting to Chrome, retrying...
...org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
... impliziert, dass die von Ihnen verwendete ChromeDriver / Google-Chrome- Kombination nicht die neueste ist, da die aktuelle Implementierung von ChromeDriver den WebDriver W3C- Spezifikationen folgt und die ersten Protokolle Folgendes widerspiegeln:
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
Ihr Hauptproblem ist also die Inkompatibilität zwischen der Version der Binärdateien, die Sie wie folgt verwenden:
- Sie verwenden chromedriver = 2.43
- In den Versionshinweisen von chromedriver = 2.43 wird Folgendes klar erwähnt:
Unterstützt Chrome v69-71
- Möglicherweise verwenden Sie das neueste Chrome = 84.0
- In den Versionshinweisen von ChromeDriver v84.0 wird Folgendes klar erwähnt:
Unterstützt Chrome Version 84
Daher besteht zwischen ChromeDriver v2.43 und dem Chrome Browser v84.0 ein deutliches Missverhältnis
Lösung
Sicher gehen, dass:
- JDK wird auf das aktuelle Niveau JDK 8u251 aktualisiert .
- Selen wird auf die aktuelle Version 3.141.59 aktualisiert .
- ChromeDriver wird auf die aktuelle Version von ChromeDriver v84.0 aktualisiert .
- Chrome wird auf die aktuelle Version von Chrome Version 84.0 aktualisiert . (gemäß den Versionshinweisen zu ChromeDriver v84.0 )
- Wenn Ihre Basis- Webclient- Version zu alt ist, deinstallieren Sie sie und installieren Sie eine aktuelle GA- und veröffentlichte Version von Web Client .
- Bereinigen Sie Ihren Projektarbeitsbereich über Ihre IDE und erstellen Sie Ihr Projekt nur mit den erforderlichen Abhängigkeiten neu.
- Führen Sie einen Systemneustart durch .
- Führen Sie Ihren Benutzer
@Test
als Nicht-Root aus . - Rufen Sie immer
driver.quit()
innerhalb dertearDown(){}
Methode auf, um die WebDriver- und Web Client- Instanzen ordnungsgemäß zu schließen und zu zerstören .
Referenz
Einige relevante ausführliche Diskussionen finden Sie in:
- Versuch einer Bi-Dialekt-Sitzung unter der Annahme, dass das Postelsche Gesetz auf der Remote-Seite gilt und mit ChromeDriver und Selenium auf das ursprüngliche OSS JSON zurückgegriffen wird
Ich denke, das Problem hier ist, dass der Treiber noch nicht in der DashBoard-Klasse initialisiert ist.
Versuchen Sie, das DashBoard in BaseClass zu erweitern.
public class Dashboard extends BaseClass {
public Dashboard(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}