본문 바로가기

IT

Selenium Python 튜토리얼: 예제와 함께 배우기

목차

     

    새로운 기능들이 웹 애플리케이션에 몇 주마다 추가되어 사용자 참여를 높입니다. 이러한 기능들을 테스트하고 UI가 잘 작동하는지 확인하기 위해 자동화 테스트가 필요합니다. 전 세계 테스터들에게 Selenium은 자동화된 테스트를 실행하는 데 첫 번째 선택입니다.

    Selenium은 여러 스크립팅 언어를 지원하는 오픈 소스 자동화 테스트 도구입니다. Python, C#, Java, Perl, Ruby, JavaScript 등 애플리케이션을 테스트할 때 필요에 따라 스크립트를 선택할 수 있습니다.

    StackOverflow 2023 설문조사에 따르면, 올해 세 가지 인기 있는 언어가 상위 열 개 프로그래밍 언어 중 지위를 높였습니다. Python은 지난 세 해 동안 인기가 높아지고 있으며 올해는 한 단계 올라 세 번째를 차지했습니다.

    이 가이드는 웹 자동화 테스트를 수행하기 위한 단계별 Selenium Python 튜토리얼로 기능할 것입니다. 테스트를 정의하고 이러한 테스트의 결과를 사전에 결정된 브라우저에서 자동으로 감지할 수 있습니다. 여러분은 브라우저의 반응이 기대와 일치하는지 결정할 수 있습니다.

    이 게시물은 Selenium에 대한 사전 지식이 없다고 가정합니다. 그러나 DOM과 같은 프론트엔드 개념에 대한 기본적인 이해와 Python에 익숙함이 요구됩니다.

     

     

    Selenium Python 테스트를 실행하기 위한 전제 조건

    Selenium과 Python을 설치하는 가장 쉬운 방법은 pip 설치 프로그램을 사용하는 것입니다.

    pip install selenium

     

    Selenium 설치는 기능을 사용할 수 있게 해주지만, 선택한 웹 브라우저와 인터페이스할 수 있도록 추가 드라이버가 필요합니다. 드라이버 다운로드 링크는 다음과 같습니다:

    이 Python Selenium 튜토리얼의 나머지 부분에서는 Chromedriver를 사용할 것입니다. 선택한 브라우저에 대한 링크를 따라가서 호환 버전의 드라이버를 다운로드하세요.

    로컬에서만 Selenium을 테스트할 계획이라면 패키지와 드라이버를 다운로드하는 것으로 충분합니다. 그러나 원격 서버에 Selenium을 설정하려면 추가로 Selenium 서버를 설치해야 합니다. Selenium 서버는 자바로 작성되었으며 서버에 설치하려면 JRE 1.6 이상이 필요합니다. 이는 Selenium의 다운로드 페이지에서 사용할 수 있습니다.

    첫 번째 테스트 실행 방법: Selenium Python 예제


    전제 조건 섹션을 완료하면 Python 프로그래밍 언어를 사용하여 Selenium에서 첫 번째 테스트를 시작할 수 있습니다!

    • 먼저 Selenium에서 WebDriver 및 Keys 클래스를 가져옵니다
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys

     

    WebDriver 클래스는 곧 다룰 브라우저 인스턴스에 연결합니다. Keys 클래스를 사용하면 “Shift” 및 “Return”과 같은 특수 키를 포함하여 키보드 키의 입력을 모방할 수 있습니다.

    • 다음으로, 다운로드한 드라이버의 경로를 통해 Chrome의 인스턴스를 생성합니다. 이 예제에서는 드라이버가 Python 스크립트를 실행할 같은 디렉토리에 있다고 가정합니다.
    driver = webdriver.Chrome('./chromedriver')

     

    로컬 머신에서 테스트하는 경우 이 명령은 로컬에서 Chrome 인스턴스를 엽니다. 이 명령을 사용하면 .close() 메서드를 사용하여 브라우저와의 연결을 종료할 때까지 테스트를 수행할 수 있습니다.

    • 그 다음 드라이버의 .get() 메서드를 사용하여 웹사이트를 로드합니다. 로컬 개발 사이트를 로드할 수도 있습니다. 이 과정은 로컬 머신에서 Chrome 창을 열고 URL을 입력한 다음 Enter 키를 누르는 것과 동일합니다. .get() 메서드는 웹사이트가 완전히 렌더링될 때까지 기다린 후 다음 단계로 넘어갑니다.
    driver.get("https://www.python.org")
    • 페이지가 성공적으로 로드되면 .title 속성을 사용하여 웹 페이지의 텍스트 제목에 접근할 수 있습니다. 페이지 제목에 특정 부분 문자열이 포함되어 있는지 확인하려면 assert 또는 if 문을 사용할 수 있습니다. 간단히 페이지 제목을 출력해 봅시다.
    print(driver.title)

     

    출력된 텍스트는 다음과 같습니다:

    Welcome to Python.org

     

    Python 인터프리터에서 테스트를 실행하면 Chrome 브라우저 창이 여전히 활성 상태임을 알 수 있습니다. 또한 Chrome에는 자동화 소프트웨어가 현재 이를 제어하고 있음을 나타내는 메시지가 표시됩니다.

    • 그 다음 검색창에서 쿼리를 제출해 봅시다. 먼저 HTML DOM에서 요소를 선택하고 값을 입력한 다음 Return 키 누르기를 모방하여 폼을 제출합니다. CSS 클래스, ID, 이름 속성 또는 태그 이름을 사용하여 요소를 선택할 수 있습니다. 쿼리 검색 창의 소스를 확인하면 이 DOM 요소의 이름 속성이 "q"임을 알 수 있습니다. 따라서 다음과 같이 .find_element_by_name() 메서드를 사용하여 요소를 선택할 수 있습니다.
    search_bar = driver.find_element_by_name("q")
    • DOM 요소를 선택하면 먼저 .clear() 메서드를 사용하여 내용을 지우고, .send_keys() 메서드를 사용하여 값을 입력한 다음, Keys.RETURN을 사용하여 Return 키를 모방합니다.
    search_bar.clear()
    search_bar.send_keys("getting started with python")
    search_bar.send_keys(Keys.RETURN)

     

    창에서 이러한 작업이 URL의 변경을 트리거하는 것을 볼 수 있습니다. 창의 현재 URL을 확인하려면 다음 명령을 사용할 수 있습니다.

    print(driver.current_url)

     

    다음 문자열이 표시됩니다:

    'https://www.python.org/search/?q=getting+started+with+python&submit='

     

    현재 세션을 닫으려면 .close() 메서드를 사용합니다. 이 메서드는 브라우저와의 연결도 끊습니다.

    driver.close()

     

    이 예제에서는 Selenium Python을 사용하여 첫 번째 테스트를 실행하는 단계를 살펴보았습니다. 모든 테스트 단계 동안 창을 열어 두었기 때문에 각 명령을 실행할 때 배경에서 무엇이 일어나는지 알 수 있습니다.

    완전히 자동화된 흐름에서는 여러 테스트를 순차적으로 실행하며 각 단계를 볼 수 없을 수 있습니다.

    이에 대한 요약으로, Python에서 첫 Selenium 테스트를 저장할 수 있는 selenium_test.py 파일을 만들고 python selenium_test.py를 실행하여 테스트를 수행할 수 있습니다.

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome('./chromedriver')
    driver.get("https://www.python.org")
    print(driver.title)
    search_bar = driver.find_element_by_name("q")
    search_bar.clear()
    search_bar.send_keys("getting started with python")
    search_bar.send_keys(Keys.RETURN)
    print(driver.current_url)
    driver.close()

     

    이 글에서는 Selenium을 사용하여 교차 브라우저 테스트 프로세스를 자동화하는 다양한 기법을 다루었습니다. 브라우저 지원, DOM 탐색, 대기 시간, 단위 테스트와 같은 SeleniumWebdriver Python 테스트의 다양한 측면에 대해 논의했습니다.

    Selenium WebDriver는 자동화 테스트를 이전보다 더 쉽고 효율적으로 만들어주었습니다. Python을 사용하여 테스트 스크립트를 만드는 것은 애플리케이션에 대한 자동화된 UI 테스트를 수행하기 쉽게 해줍니다. 이는 특히 개발 주기가 짧고 몇 주마다 기능이 추가되어 사용자 요구를 충족시켜야 할 때 유용합니다.

    HTML DOM 요소 탐색

    웹 페이지의 요소와 상호작용하는 방법을 배우는 것은 웹 자동화 테스트에서 매우 중요합니다. 예를 들어, Python과 Selenium을 사용하여 특정 요소를 찾고, 데이터를 입력하고, 버튼을 클릭하는 것과 같은 작업을 자동화할 수 있습니다.

    # 요소를 ID로 찾기
    element_by_id = driver.find_element_by_id("id-search-field")
    
    # 요소를 이름으로 찾기
    element_by_name = driver.find_element_by_name("q")
    
    # 요소를 CSS 클래스로 찾기
    element_by_class = driver.find_element_by_class_name("search-field")
    
    # 요소를 XPath로 찾기
    element_by_xpath = driver.find_element_by_xpath("//input[@id='id-search-field']")

     

    윈도우 및 프레임 탐색

    복잡한 웹 애플리케이션은 때때로 여러 윈도우나 프레임을 사용할 수 있습니다. Selenium에서는 다음과 같이 다른 윈도우 또는 프레임으로 전환하는 기능을 제공합니다.

    # 새 윈도우로 전환
    driver.switch_to.window("window_name")
    
    # 프레임 전환
    driver.switch_to.frame("frame_name")
    
    # 메인 컨텐츠로 돌아가기
    driver.switch_to.default_content()

     

    대기 시간 처리

    웹 페이지가 완전히 로드되거나 특정 요소가 사용 가능해질 때까지 기다리는 것은 자동화 테스트에서 흔히 발생하는 요구 사항입니다. Selenium은 명시적 대기와 암시적 대기 두 가지 방법을 제공합니다.

    # 명시적 대기
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.presence_of_element_located((By.ID, "new-element-id")))
    
    # 암시적 대기
    driver.implicitly_wait(10)  # 10초 동안 대기