Chrome에 연결하는 동안 시간이 초과되었습니다. 다시 시도 중… ChromeDriver 2.43 및 Selenium을 통한 Chrome 사용 오류
솔직히이 시점에서 무엇을해야할지 모르겠습니다. 콘솔에 오류 로그가 표시되지 않고 스크립트에 넣은 로거 메시지 만 표시됩니다.
Dashboard Constructor를 생성하는 코드 줄에 도달하면 테스트가 종료되고 실패로 선언됩니다. 마지막으로 기록 된 메시지는 항상 "About to start looking"입니다.
이 질문을 게시하기 전에 전체 생성자 (모든 코드를 주석 처리하고 드라이버 매개 변수를 제거하고 인쇄 문을 넣었습니다)를 뽑아 내고 클래스 내에서 인쇄 메서드를 호출했을 때 스크립트가 생성 된 줄에서 실패했습니다. 생성자가 발생했습니다.
나는 무슨 일이 일어나고 있는지 이해하지 못합니다. 매우 명백한 것을 놓칠 수 있습니다. 실패하지만 콘솔에 특정 오류 메시지가 반드시 표시되는 것은 아닙니다.
다음은 실행하려는 테스트 케이스입니다.
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 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();
}
}
콘솔 오류 :
답변
이 오류 메시지 ...
...[WARNING]: Timed out connecting to Chrome, retrying...
...org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
... 현재 ChromeDriver 구현이 WebDriver W3C 사양을 따르고 초기 로그에 반영 되므로 사용 중인 ChromeDriver / google-chrome 콤보가 최신 버전이 아니라는 것을 의미 합니다.
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로 업그레이드됩니다 .
- Selenium 은 현재 레벨 버전 3.141.59로 업그레이드되었습니다 .
- ChromeDriver 가 현재 ChromeDriver v84.0 수준으로 업데이트되었습니다 .
- Chrome 이 현재 Chrome 버전 84.0 수준으로 업데이트되었습니다 . ( ChromeDriver v84.0 출시 노트 기준 )
- 기본 웹 클라이언트 버전이 너무 오래된 경우 제거하고 최신 GA 및 릴리스 된 웹 클라이언트 버전을 설치합니다 .
- 청소 당신의 프로젝트 작업을 당신을 통해 IDE 및 재 구축 에만 필요 종속성이 프로젝트를.
- 테이크 시스템 재부팅을 .
- 루트가 아닌 사용자
@Test
로 실행하십시오 . - WebDriver 및 Web Client 인스턴스를 정상적으로 닫고 제거하려면 항상 메서드
driver.quit()
내에서 호출하십시오 .tearDown(){}
참고
다음에서 몇 가지 관련 세부 토론을 찾을 수 있습니다.
- 양방향 방언 세션 시도, Postel의 법칙이 원격 끝에서 사실이라고 가정하고 ChromeDriver 및 Selenium을 사용하여 원래 OSS JSON으로 폴백
여기서 문제는 드라이버가 아직 DashBoard 클래스에서 초기화되지 않았다는 것입니다.
DashBoard를 BaseClass로 확장하십시오.
public class Dashboard extends BaseClass {
public Dashboard(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}