在UI自動化實施過程中,存在一些元素定位和鼠標鍵盤操作無法解決的問題,比如滑動瀏覽器滾動條,某些元素出現在可見范圍內等等。
selenium中有幾種直接操作瀏覽器動作,刷新頁面操作如下:
# 刷新頁面 driver.refresh()
常用的還有,
back():瀏覽器訪問頁面回退
forward():瀏覽器訪問頁面前進
close():關閉當前窗口
quit():關閉所有窗口和瀏覽器
這里close和quit的使用容易混淆,close相當於只作用於當前句柄窗口,quit作用於整個瀏覽器。
除此之外,還有些瀏覽器操作是selenium無法直接完成的,需要通過發送js代碼間接完成,這里就要介紹一個driver新的方法,
execute_script():里面的參數是字符串格式的js代碼,這里以滑動瀏覽器滾動條至最底部為例,
因此首先我們要知道,使用純js代碼如何實現滑動瀏覽器滾動條,很簡單:
// x,y為橫,縱坐標位置,單位px window.scrollTo(x, y)
如果將滾動條滑至距窗口頂部1000px的位置,
window.scrollTo(0, 1000)
如果想滑到窗口最底部呢?每一個網頁頁面的高度可能不同,所以可以使用如下方法,
window.scrollTo(0, document.body.scrollHeight)
結合上面driver的方法,我們可以將js代碼通過python發送給瀏覽器驅動,
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
想要滑動橫着的滾動條,只需要修改x的值即可。
上面是對整個瀏覽器的滾動條操作,假設現在我們只需要讓頁面中某個元素可見,又該如何操作呢?
此處以簡書官網首頁的【查看全部】鏈接為例,
瀏覽大致和操作瀏覽器滾動條一樣,
element = driver.find_element_by_class_name('find-more')
driver.execute_script("arguments[0].scrollIntoView(false);", element)
execute_script第一個參數是想要發送的js代碼,第二個參數是待操作的元素。scrollIntoView里的false是讓【查看全部】鏈接在窗口底部可見,該參數默認為true,元素會在窗口頂部可見,但是有些時候會被頂部的懸浮導航欄遮擋,因此具體如何使用根據實際情況決定。
