Selenium WebDriver는 실제 사용자가 동작시키는 것처럼 브라우저를 구동하는 웹 프레임워크이다.
Selenium WebDriver
Selenium WebDriver는 언어 바인딩과 개별 브라우저 제어 코드의 구현 모두를 가리킨다. 이것은 흔히 WebDriver라고 불린다.
Basic Communication
WebDriver는 드라이버를 브라우저와 통신한다. 통신은 양방향이다. WebDriver는 드라이버를 통해 브라우저에 명령을 전달하고 동일한 경로를 통해 정보를 다시 수신한다.
드라이버는 Google Chrome/Chromium용 ChromeDriver, Mozilla Firefox용 GeckoDriver 등과 같이 브라우저에 따라 다르다. 드라이버는 브라우저와 동일한 시스템에서 실행된다. 이는 테스트 자체가 실행 중인 시스템과 동일하거나 동일하지 않을 수 있다.
Remote Communication
브라우저와의 통신은 Selenium Server 또는 RemoteWebDriver를 통한 원격 통신일 수도 있다. RemoteWebDriver는 드라이버 및 브라우저와 동일한 시스템에서 실행된다.
Remote Communication with Grid
원격 통신은 Selenium Server 또는 Selenium Grid를 사용하여 수행될 수 있으며, 둘 다 호스트 시스템의 드라이버와 통신할 수 있다.
이전 포스팅에서 Selenium IDE로 생성한 테스트 케이스를 Python 언어로 Export 하자. 아래와 같은 코드가 생성될 것이다.
(※ 탑승일은 지나지 않은 날짜로 변경하였다.)
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class TestFlightSearch():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def test_flightSearch(self):
self.driver.get("https://www.koreanair.com/kr/ko")
self.driver.set_window_size(1281, 824)
self.driver.find_element(By.XPATH, "//button[2]/span").click()
self.driver.find_element(By.XPATH, "//ke-airport-chooser/div/div/input").click()
self.driver.find_element(By.CSS_SELECTOR, "ke-airport-chooser>div>div>input").send_keys("NYC 뉴욕/모든 공항")
self.driver.find_element(By.CSS_SELECTOR, "ke-airport-chooser>div>div>input").send_keys(Keys.ENTER)
self.driver.find_element(By.CSS_SELECTOR, ".quickbooking__datepicker").click()
self.driver.find_element(By.ID, "ipt-depature").click()
self.driver.find_element(By.ID, "ipt-depature").send_keys("2021.10.09.")
self.driver.find_element(By.ID, "ipt-arrival").click()
self.driver.find_element(By.ID, "ipt-arrival").send_keys("2021.10.11.")
self.driver.find_element(By.CSS_SELECTOR, ".dialog__confirm:nth-child(2)").click()
self.driver.find_element(By.CSS_SELECTOR, ".quickbooking__find").click()
Export한 코드는 아래 코드를 추가하여 테스트를 실행할 수 있다. Selenium IDE로 Run all test 한 것과 동일하게 브라우저가 구동된다.
test = TestFlightSearch()
test.setup_method("")
test.test_flightSearch()
test.teardown_method("")
코드를 수정하여 간단한 Unit Test를 만들 수 있다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import unittest
import HtmlTestRunner
class TestFlightSearch(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome('D:/seleniumdrivers/chromedriver')
cls.driver.implicitly_wait(10)
cls.driver.maximize_window()
def test_flightSearch(self):
self.driver.get("https://www.koreanair.com/kr/ko")
self.driver.find_element(By.XPATH, "//button[2]/span").click()
self.driver.find_element(By.XPATH, "//ke-airport-chooser/div/div/input").click()
self.driver.find_element(By.CSS_SELECTOR, "ke-airport-chooser>div>div>input").send_keys("NYC 뉴욕/모든 공항")
self.driver.find_element(By.CSS_SELECTOR, "ke-airport-chooser>div>div>input").send_keys(Keys.ENTER)
self.driver.find_element(By.CSS_SELECTOR, ".quickbooking__datepicker").click()
self.driver.find_element(By.ID, "ipt-depature").click()
self.driver.find_element(By.ID, "ipt-depature").send_keys("2021.10.09.")
self.driver.find_element(By.ID, "ipt-arrival").click()
self.driver.find_element(By.ID, "ipt-arrival").send_keys("2021.10.11.")
self.driver.find_element(By.CSS_SELECTOR, ".dialog__confirm:nth-child(2)").click()
self.driver.find_element(By.CSS_SELECTOR, ".quickbooking__find").click()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
print('Test Done Successfully!')
if __name__ == "__main__":
unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='reports'))
터미널에서 파일을 실행 시키면, 테스트를 실행하고 [그림 4]와 같이 테스트 결과를 기록한다.
> python test_flightSearch.py
Test Done Successfully!
Running tests...
----------------------------------------------------------------------
DevTools listening on ws://127.0.0.1:6400/devtools/browser/16b28df3-637c-4b0f-9fb6-46fcb07da17d
test_flightSearch (__main__.TestFlightSearch) ... OK (10.612608)s
----------------------------------------------------------------------
Ran 1 test in 0:00:15
OK
Generating HTML reports...
reports\TestResults___main__.TestFlightSearch_2021-09-26_21-54-04.html
참고
- Selenium WebDriver
https://www.selenium.dev/documentation/webdriver/ - Selenium Python Small Sample Project 1 | Unit Test, HTML Reports
https://youtu.be/H9HUVSA_78U
'Selenium' 카테고리의 다른 글
Selenium IDE (0) | 2021.09.07 |
---|---|
Selenium (0) | 2021.08.26 |
댓글