python中selenium操做下拉滾動條方法彙總

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本身寫的方法二)一致,工具給咱們作了封裝。

相關文章
相關標籤/搜索