หมดเวลาในการเชื่อมต่อกับ Chrome กำลังลองใหม่…เกิดข้อผิดพลาดโดยใช้ ChromeDriver 2.43 และ Chrome ผ่าน Selenium

Aug 15 2020

ฉันไม่แน่ใจว่าต้องทำอย่างไรในตอนนี้ฉันไม่ได้รับบันทึกข้อผิดพลาดใด ๆ ในคอนโซลเพียงแค่ข้อความคนตัดไม้ที่ฉันใส่ไว้ในสคริปต์

เมื่อฉันไปถึงบรรทัดรหัสที่ฉันสร้าง 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();
        
        
    }
    
}

ข้อผิดพลาดคอนโซล:

คำตอบ

DebanjanB Aug 16 2020 at 22:27

ข้อความแสดงข้อผิดพลาดนี้ ...

...[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
abracants Aug 16 2020 at 09:19

ฉันคิดว่าปัญหาที่นี่คือไดรเวอร์ยังไม่ได้เริ่มต้นในคลาส DashBoard

ลองขยาย DashBoard ไปยัง BaseClass

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

}