分享乙個神器,Selenium 自動化測試工具

2021-09-13 19:43:06 字數 2805 閱讀 3108

最近寫專案的時候,用到了selenium,乙個 web 端的自動化測試工具,直接執行在瀏覽器中,用來模擬使用者操作。

selenium 不僅僅可以用作自動化測試,還有很多種玩法,比如 python 的爬蟲,實現某商品的秒殺,甚至是頁遊外掛程式指令碼,只要是基於瀏覽器操作,只有你想不到,沒有 selenium 做不到,就是這麼強大!

直奔主題,我們來感受一下 selenium。

通過 pip 命令安裝 selenium

pip install selenium
selenium 支援的瀏覽器很多,firefox、chrome、ie、opera 等等。

作為乙個程式設計師,想必大多常用的瀏覽器都是 chrome,我的電腦是 mac,安裝 chrome 瀏覽器驅動,直接執行brew cask install chromedriver即可。

先來一段簡單的**。

from selenium import webdriver

from selenium.webdriver.common.keys import keys

browser = webdriver.chrome()

browser.get('')

browser.find_element_by_id('kw').send_keys('php')

browser.find_element_by_id('kw').send_keys(keys.enter)

1. 頁面元素定位

selenium 常用的元素定位方法

我們可以這樣定位

element = driver.find_element_by_id('kw')

element = driver.find_element_by_class_name('s_ipt')

element = driver.find_element_by_css_selector('.s_ipt')

獲取元素之後,就是針對於元素的操作了,簡單可以劃分兩類操作,滑鼠事件和鍵盤事件等等。

2. 滑鼠操作

element.click()  單擊;

element.context_click() 右擊;

element.double_click() 雙擊;

element.drag_and_drop() 拖動;

element.move_to_element() 滑鼠懸停

3. 輸入和鍵盤事件

輸入文字:

element.send_keys("hello world")
鍵盤操作:

element.send_keys(keys.enter) 回車

element.send_keys(keys.control,『a』) 全選(ctrl+a)

element.send_keys(keys.control,『c』) 複製(ctrl+c)

element.send_keys(keys.control,『x』) 剪下(ctrl+x)

element.send_keys(keys.control,『v』) 貼上(ctrl+v)

element.send_keys(keys.f1) 鍵盤 f1

…… 等等

driver.switch_to_window("windowname")
# 獲取所有開啟視窗控制代碼

all_handles = driver.window_handles

# 獲取當前視窗控制代碼

current_windows = driver.current_window_handle

現在很多專案都是前後端分離的,html 動態渲染,如果我們開啟某頁面,直接選取元素操作,就會丟擲異常,所以設定頁面等待是很有必要的。

等待分為兩種型別:顯式等待和隱式等待。

顯式等待:針對頁面的某一元素,每隔一段時間檢測一次當前頁面元素是否存在,如果超過設定時間檢測不到則丟擲異常

from selenium import webdriver

from selenium.webdriver.common.by import by

from selenium.webdriver.support.ui import webdriverwait

from selenium.webdriver.support import expected_conditions as ec

driver = webdriver.firefox()

driver.get("")

element = webdriverwait(driver, 5, 0.5).until(

ec.presence_of_element_located((by.id, "kw"))

)element.send_keys('selenium')

driver.quit()

隱式等待:並不針對頁面上的某一元素進行等待,指令碼執行到某個元素定位時,如果元素可以定位,則繼續執行;如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位,直到超出設定時長,丟擲異常。

# 設定隱式等待為10秒

driver.implicitly_wait(10)

女票再讓我幫她秒殺商品,再也不用傻傻等待,分分鐘用 selenium 寫個秒殺應用有木有!:)

分享乙個SharedPreferences工具類

直接上 public class sputils else if object instanceof integer else if object instanceof boolean else if object instanceof float else if object instanceof...

分享乙個oraclehelper

分享乙個拿即用的oraclehelper 首先要引用本機中的oralce access,如果是64位的話,也必須是64位執行,不然會報連線為空connection 等於null.using oracle.dataaccess using oracle.dataaccess.client public...

自寫乙個EventBus

首發於enaium的個人部落格 eventbus,什麼是eventbus。eventbus是事件發布 訂閱匯流排,簡單來說監聽乙個事件,乙個方法訂閱這個事件,如果事件呼叫,那麼訂閱了這個事件的方法也會跟著呼叫,這就是eventbus。建立乙個註解,用於訂閱事件,名字可以隨便起,當然也可以叫subsc...