페이지 개체 모델에서 모든 클래스가 단일 드라이버 인스턴스를 공유해야합니까?
BaseTest.java 파일을 만들고 Public static WebDriver 드라이버를 선언 할 수 있습니다. 그것에. 그러면 모든 클래스가 동일한 드라이버 참조를 확장하고 사용할 수 있습니다.
그러면 모든 테스트 클래스가 동일한 인스턴스를 사용할 수 있습니다.
사용해도 되나요:
driver = new ChromeDriver();
모든 testng 방법 또는 Cucumber 시나리오에서. 드라이버 사용법이 혼란 스럽습니다. 드라이버가 크롬 창 세션입니까?
답변
드라이버가 크롬 창 세션입니까?
아니요. ChromeDriver는 로컬에서 실행되는 Chrome 브라우저를 제어하는 서버를 나타냅니다. 서버는 시작, 종료 및 작업 제어와 같은 브라우저의 수명주기를 제어합니다.
자세한 내용은 문서를 참조하세요.
드라이버를 만들 수 있습니까 = new ChromeDriver (); 모든 테스트 방법 또는 오이 시나리오에서
예,하지만 상황에 따라 다릅니다. 일부 작업에서 여러 브라우저를 독립적으로 실행하려는 경우 새 드라이버를 만들 수 있습니다.
보너스:
BaseTest.java 파일을 만들고 Public static WebDriver 드라이버를 선언 할 수 있습니다. 그것에. 그러면 모든 클래스가 동일한 드라이버 참조를 확장하고 사용할 수 있습니다.
위험 할 수 있습니다. 상속은 만들 수있는 가장 강력한 형태의 결합이며 전역 변수를 사용하면 이해하기 매우 어려운 동작의 변화를 일으킬 수 있습니다. Driver 인스턴스가 페이지 개체에 삽입되도록 코드를 리팩터링 할 수 있습니다 . 이렇게하면 페이지 개체를 전역 변수에 연결하지 않고 Driver에 대한 테스트 이중 을 삽입하여 쉽게 단위 테스트를 만들 수 있습니다 .
chromedriver는 무엇입니까?
chromedriver에는 브라우저와 상호 작용할 수있는 코드가 있습니다. 이 명령은 API를 통해 노출됩니다 (이것은 localhost : 14563에서 시작된 chromedriver로 표시되는 것입니다). 코드에서이 API 끝점에 액세스하여 크롬 드라이버에 작업을 지시합니다.
예를 들어, elem.click ()이라고 말하면 셀레늄은 API와 대화하고 브라우저에서 지정된 요소를 클릭하도록 chromedriver에 지시합니다. 그리고 크롬 드라이버가 그것을 수행하고 브라우저에서 응답을 반환하고 코드를 다시 반환합니다.

기본 클래스가 필요한 이유
이는 드라이버 세션이 서로 다른 클래스간에 전달되도록하기위한 것입니다. 그렇지 않으면 다음과 같은 작업을 수행 할 수 없습니다.
page1.sendpassword()
page1.sendusername()
page1.submit()
page2.adduser()
페이지 1과 페이지 2에 대해 다른 드라이버 세션이있는 경우
그런 다음 page2.adduser ()를 시작하면 크롬 드라이버가 새로 시작되고 이전 로그인 세션을 사용할 수 없으므로 다시 로그인해야합니다.
또한보고를 위해 리스너 클래스에 스크린 샷 또는 드라이버 별 작업을 추가 할 수 없습니다.
다음에서 기본 클래스에 대해 자세히 읽을 수 있습니다.
POM 프레임 워크에서 전역 정적 WebDriver 개체를 선언하는 BaseTest 클래스를 만드는 목적은 무엇입니까?
코드의 WebDriver 인스턴스는 웹 드라이버 구현의 단일 세션과 상호 작용하는 데 사용하는 일종의 채널입니다. 기본적으로 코드에서 사용하는 것을 클라이언트 바인딩 이라고 합니다.
WebDriver는 한 쪽에서 클라이언트 바인딩 (예 : Java 라이브러리)에 REST API를 노출하고 다른 쪽에서 브라우저를 제어 할 수있는 HTTP 서버입니다.
따라서 동일한 크롬 세션 (쿠키 보존 등)에서 작동한다고 가정하는 모든 코드는 동일한 웹 드라이버 인스턴스를 공유해야합니다.
코드에서 다이버를 한 명 더 인스턴스화하는 것을 막을 수있는 것은 없습니다. 새 인스턴스를 통해 다른 병렬 격리 된 브라우저 세션을 제어 할 수 있습니다.