selenium은 모든 작업을 수행할 수 있는 만능 도구가 아닙니다. 페이지上的 요소가 화면을 넘어서면 화면 아래의 요소를 작업하려면 스크롤을 사용해야 합니다. 이때는 직접 요소를 찾을 수 없어 "요소가看不见" 에러가 발생합니다.
이러한 문제를 해결하기 위해 스크롤 바를 수동으로 이동시켜 작업할 요소를 화면에 보이게 해야 합니다. 그러나 selenium은 직접 스크롤 바를 제어할 수 있는 명령어가 없습니다. 다행히도 selenium은 execute_script() 메소드를 통해 JavaScript 코드를 실행할 수 있습니다.
방법 1: JavaScript로 직접 제어
# 화면 최상단으로 이동
def scroll_top(self):
if self.driver.name == "Chrome":
js = "var q=document.body.scrollTop=0"
else:
js = "var q=document.documentElement.scrollTop=0"
return self.driver.execute_script(js)
# 화면 최하단으로 이동
def scroll_foot(self):
if self.driver.name == "Chrome":
js = "var q=document.body.scrollTop=1000"
else:
js = "var q=document.documentElement.scrollTop=1000"
return self.driver.execute_script(js)
또는:
js="var q=document.getElementById('***').scrollTop=10000"
driver.execute_script(js)
여기서 '***'는 스크롤바의 id입니다. 그러나 JavaScript에는 xpath와 같은 방법이 없기 때문에 id가 없는 페이지에서는 이 방법이 적용되지 않습니다.
위의 코드는 상하 방향 스크롤을 설명했습니다. 이제 좌우 방향 스크롤 방법을 알아보겠습니다.
방법 2: window.scrollTo() 사용
#좌우 방향 스크롤 예제
js="window.scrollTo(200,1000)"
driver.execute_script(js)
방법 3: 지정위치로 스크롤
target = driver.find_element_by_id("***")
driver.execute_script("arguments[0].scrollIntoView();", target) #지정 요소로 스크롤
이 방법은 특정 요소를 화면에 보이게 할 때 유용합니다.
방법 4: scrollTo 함수 사용
#화면底部로 이동
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
#화면顶部로 이동
js = "window.scrollTo(0,0)"
driver.execute_script(js)
추가 정보: robotframework에서 selenium2library는 요소를 자동으로 초점 맞추는 focus 기능이 있습니다.
예제 코드:
driver.find_element_by_xpath("//div[@id='search']/div/span/input").click()
target = driver.find_element_by_id("_easyui_tree_17")
driver.execute_script("arguments[0].scrollIntoView();", target) #요소로 스크롤
driver.find_element_by_xpath("//span[@class='tree-title'][text()='专业测试.修改后/123456']").click()
이 코드는 방법 2와 유사하며, 툴이 요소 제어를 위한 패키지로 간편화시켜줍니다.
참고 링크: 참고 링크 1 참고 링크 2