Testing Automation/Selenium
element highlight로 확인해 보기
Tongchun
2018. 3. 22. 11:06
Selenium Code를 작성할때 element를 잘 찾았는지 확인해 보고 싶을때가 있습니다.
SikuliX를 배울때는 highlight 함수가 있어 편하게 확인했는데 Selenium에서는 함수를 하나 만들어 줘야 합니다.
selenium의 webdriver 클레스에 execute_script() 함수가 있습니다. 이걸 사용하면 현재 열려진 화면에 css를 수정하거나 할 수 있습니다.
함수는 아래와 같습니다.
def highlight(element): # 파라메터로 전달받은 element의 상위 driver를 확인합니다. driver = element._parent # highlight() 함수안에 apply_style()이라는 내부 함수를 만들어 줍니다. def apply_style(s): # execute_script() 함수를 사용해 해당 element의 css를 추가해 줍니다. driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element, s) # 원래 스타일을 확인하고 저장해 놉니다. original_style = element.get_attribute('style') # 내부 함수인 apply_style로 css를 적용합니다. # 바탕은 노란색, 외곽선은 붉은색오로 합니다. apply_style("background: yellow; border: 2px solid red;") # 스타일을 변경한 채로 2초간 대기합니다. time.sleep(2) # 다시 원래 스타일로 적용합니다. apply_style(original_style)
위 highlight 함수를 기본 스크립트에 적용해 봅시다.
# -*- coding: utf-8 -*- import time from selenium import webdriver # selenium 기본 코드에 hightlight() 함수를 적용합나다. def highlight(element): driver = element._parent def apply_style(s): driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element, s) original_style = element.get_attribute('style') apply_style("background: yellow; border: 2px solid red;") time.sleep(2) apply_style(original_style) # Chrome WebDriver를 이용해 Chrome을 실행합니다. driver = webdriver.Chrome('./chromedriver') # www.google.com으로 이동합니다. driver.get("www.google.com") time.sleep(2) # html element 이름이 q인 것을 찾습니다. (검색창) inputElement = driver.find_element_by_name("q") # htghlight() 함수로 inputElement를 확인해 봅니다. highlight(inputElement) time.sleep(2) # 검색창에 'www.ngle.co.kr'을 입력합니다. inputElement.send_keys("www.ngle.co.kr") time.sleep(2) # 검색 내용을 보냅니다. inputElement.submit() time.sleep(2) # 검색된 리스트 중 링크 텍스트에 'THE BEST BUSINESS PLAN'이 포함된 것을 찾습니다. continue_link = driver.find_element_by_partial_link_text('THE BEST BUSINESS PLAN') # htghlight() 함수로 continue_link 확인해 봅니다. highlight(continue_link) time.sleep(2) # 해당 링크를 클릭합니다. continue_link.click() time.sleep(5) # WebDriver를 종료합니다. (브라우저 닫기) driver.quit()
highlight 함수를 만들어서 element를 확인하는 방법이었습니다.