UI自動化中常常會遇到元素識別不到,找不到的問題,緣由有不少,好比不在iframe裏,xpath或id寫錯了等等;但有一種是在當前顯示的頁面元素不可見,拖動下拉條後元素就出來了。python
好比下面這樣一個網頁,須要進行拖動下拉條後才能經過selenium找到密碼輸入框的元素,web
在python中有幾種方法解決這種問題,簡單介紹下,給須要的人:框架
方法一)使用js腳本直接操做,方法以下:ide
js="var q=document.getElementById('id').scrollTop=10000" driver.execute_script(js)
或:工具
js="var q=document.documentElement.scrollTop=10000" driver.execute_script(js)
這裏的id爲滾動條的id,但js中沒有xpath的方法,因此滾動條沒有id的網頁此方法不適用spa
方法二)使用js腳本拖動到提定地方code
target = driver.find_element_by_id("id_keypair") driver.execute_script("arguments[0].scrollIntoView();", target) #拖動到可見的元素去
這個方法能夠將滾動條拖動到須要顯示的元素位置,此方法用途比較廣,能夠使用blog
方法三)根據頁面顯示進行變通,發送tab鍵ip
在本例中的頁面中,密碼是輸入框,正常手工操做時,能夠經過tab鍵會切換到密碼框中,因此根據此思路,在python中也能夠發送tab鍵來切換,使元素顯示element
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)
update
前段時間使用robotframe work框架時,selenium2library裏面有一個很是好用的功能Focus,會自動定位到元素,研讀一下源碼:
def focus(self, locator): """Sets focus to element identified by `locator`.""" element = self._element_find(locator, True, True) self._current_browser().execute_script("arguments[0].focus();", element)
從源碼中咱們能夠看到,此方法與咱們在python本身寫的方法二)一致,工具給咱們作了封裝。