Selenium Chrome Profile 사용하기

정태경·2023년 1월 8일
0
post-thumbnail

개요

Selenium은 기본적으로 시크릿모드에서 브라우저를 열게 된다. 그러나 일부 자동화 테스트 시나리오에서는 이로 인한 문제가 발생하기도 한다.

예를 들면, 특정 웹서비스가 ID/PW를 입력하지 않는 패스워드 리스 방식 + QR 코드 로그인 방식을 채택해서 서비스하고 있다고 가정해보자. 이 경우에는 웹 자동화로는 로그인을 해결할 수 없게 된다. 따라서 기존에 로그인한 정보를 활용하는 방법으로 우회해야만 한다.

두 번째로는 특정 웹서비스에서 권한 또는 액세스에 대한 팝업이 많이 노출되는 상황을 가정해보자. 마이크, 위치정보, 카메라, 알림 등 다양한 엑세스 팝업이 노출됨으로 인해서 자동화 테스트 시나리오에 영향을 끼칠 수 있다.

위와 같은 상황은 크롬 프로필을 활용하면 쉽게 우회할 수 있다.
크롬 브라우저에서 A라는 프로필을 생성한 뒤 패스워드 리스 방식의 웹서비스에 미리 로그인하여 세션을 생성해두고, 자동화 테스트 코드에서 크롬 브라우저를 실행할 때 A 프로필을 사용하여 브라우저를 실행하면 기존에 로그인된 정보를 바탕으로 로그인 스텝을 건너뛸 수 있다.

또한 A 프로필에서 마이크, 위치정보, 카메라 등 모든 권한을 허용하도록 설정해두면 엑세스 팝업이 노출되는 것을 방지할 수 있다.
이처럼 브라우저 프로필을 적절하게 사용하면 자동화 테스트 시나리오에서 발생하는 여러 문제점을 우회할 수 있다.

프로필 사용 방법

프로필을 사용하는 방법은 드라이버 생성 시 Options 객체에 인수로 크롬브라우저 실행 가능 경로, 그리고 프로필 경로를 넘겨주면 된다.

위 두가지 정보는 크롬 브라우저의 주소 표시줄에 chrome://version/ 를 입력해보면 얻을 수 있다.

얻은 정보를 바탕으로 driver를 생성해보자.


@pytest.fixture(params=["chrome"], scope="function")
def get_browser(request):
    if request.param == "chrome":
        log.logger.info("Chrome Driver 생성 시작")
        
        # 옵션 객체 생성 및 인자 넘겨주기
        options = webdriver.ChromeOptions()
        options.add_argument("--user-data-dir=/Users/taekyeong.jung/Library/Application Support/Google/Chrome")
        options.add_argument("--profile-directory=Profile 1")
        
        # 드라이버 객체 생성
        driver = webdriver.Chrome(options=options)
        log.logger.info("Chrome Driver 생성 완료")
        
        driver.get(read_config("SANDBOX", "MASTER"))

참고 사항 기록

크롬 프로필 활용 방식에도 단점은 존재하는데 새로운 웹 드라이버 인스턴스를 생성하려 할 때, 동일한 프로필의 크롬 브라우저 인스턴스가 열려있으면 크롬 웹 드라이버의 충돌로 인해 에러를 발생하는 문제가 있다. 따라서 테스트 케이스 병렬 실행 시 웹 드라이버 충돌하는 문제가 있는데 추후 해결해보고 포스팅할 예정이다.

profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글