หมดเวลาในการเชื่อมต่อกับ Chrome กำลังลองใหม่…เกิดข้อผิดพลาดโดยใช้ ChromeDriver 2.43 และ Chrome ผ่าน Selenium
ฉันไม่แน่ใจว่าต้องทำอย่างไรในตอนนี้ฉันไม่ได้รับบันทึกข้อผิดพลาดใด ๆ ในคอนโซลเพียงแค่ข้อความคนตัดไม้ที่ฉันใส่ไว้ในสคริปต์
เมื่อฉันไปถึงบรรทัดรหัสที่ฉันสร้าง Dashboard Constructor มันจะยุติการทดสอบและประกาศว่าล้มเหลวข้อความที่บันทึกล่าสุดจะเป็น "กำลังจะเริ่มค้นหา" เสมอ
ฉันยังเสียใจกับตัวสร้างทั้งหมด (แสดงความคิดเห็นรหัสทั้งหมดลบพารามิเตอร์ไดรเวอร์และใส่คำสั่งพิมพ์ไว้ในนั้น) ก่อนโพสต์คำถามนี้และเมื่อฉันเรียกวิธีการพิมพ์ภายในคลาสสคริปต์ล้มเหลวที่บรรทัดที่สร้าง ตัวสร้างเกิดขึ้น
ฉันไม่เข้าใจว่าเกิดอะไรขึ้นฉันอาจพลาดสิ่งที่ชัดเจนมาก ฉันได้รับความล้มเหลว แต่ฉันไม่จำเป็นต้องเห็นข้อความแสดงข้อผิดพลาดเฉพาะในคอนโซลด้วย
นี่คือกรณีทดสอบที่ฉันพยายามเรียกใช้:
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");
}
}
นี่คือหน้า 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();
}
}
ข้อผิดพลาดคอนโซล:

คำตอบ
ข้อความแสดงข้อผิดพลาดนี้ ...
...[WARNING]: Timed out connecting to Chrome, retrying...
...org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
... หมายความเป็นนัยว่าคำสั่งผสมChromeDriver / google-chrome ที่คุณใช้ไม่ใช่คำสั่งผสมล่าสุดเนื่องจากการใช้งานChromeDriverในปัจจุบันเป็นไปตามข้อกำหนดของWebDriver W3Cและบันทึกเริ่มต้นแสดงถึง:
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
ดังนั้นปัญหาหลักของคุณคือความเข้ากันไม่ได้ระหว่างเวอร์ชันของไบนารีที่คุณใช้ดังต่อไปนี้:
- คุณกำลังใช้chromedriver = 2.43
- บันทึกประจำรุ่นของchromedriver = 2.43กล่าวถึงสิ่งต่อไปนี้อย่างชัดเจน:
รองรับChrome v69-71
- เป็นไปได้ว่าคุณกำลังใช้chromeล่าสุด= 84.0
- บันทึกประจำรุ่นของChromeDriver v84.0กล่าวถึงสิ่งต่อไปนี้อย่างชัดเจน:
รองรับChrome เวอร์ชัน 84
ดังนั้นจึงมีความไม่ตรงกันอย่างชัดเจนระหว่างChromeDriver v2.43และเบราว์เซอร์ Chrome v84.0
วิธีการแก้
ตรวจสอบให้แน่ใจว่า:
- JDKการปรับรุ่นเป็นระดับปัจจุบันJDK 8u251
- ซีลีเนียมมีการปรับรุ่นระดับปัจจุบันเวอร์ชัน 3.141.59
- ChromeDriverได้รับการอัปเดตเป็นระดับChromeDriver v84.0ปัจจุบัน
- Chromeได้รับการอัปเดตเป็นChrome เวอร์ชัน 84.0ระดับปัจจุบัน (ตามบันทึกย่อประจำรุ่น ChromeDriver v84.0 )
- ถ้าฐานของคุณWeb Clientรุ่นเก่าเกินไปแล้วถอนการติดตั้งและติดตั้งรุ่นล่าสุด GA และปล่อยของWeb Client
- ทำความสะอาดของพื้นที่ทำงานของโครงการผ่านIDEและสร้างโครงการของคุณด้วยการอ้างอิงที่จำเป็นเท่านั้น
- ใช้เวลารีบูตระบบ
- ดำเนินการของคุณ
@Test
ในฐานะผู้ใช้ที่ไม่ใช่รูท - เรียกใช้วิธีการ
driver.quit()
ภายในเสมอtearDown(){}
เพื่อปิดและทำลายอินสแตนซ์WebDriverและWeb Clientอย่างงดงาม
ข้อมูลอ้างอิง
คุณสามารถดูการอภิปรายโดยละเอียดที่เกี่ยวข้องได้ใน:
- การพยายามเซสชัน bi-dialect โดยสมมติว่ากฎหมายของ Postel เป็นจริงบนปลายระยะไกลและการถอยกลับไปใช้ OSS JSON ดั้งเดิมโดยใช้ ChromeDriver และ Selenium
ฉันคิดว่าปัญหาที่นี่คือไดรเวอร์ยังไม่ได้เริ่มต้นในคลาส DashBoard
ลองขยาย DashBoard ไปยัง BaseClass
public class Dashboard extends BaseClass {
public Dashboard(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}