是目前軟件測試行業最為核心主流的自動化軟件測試框架技術體系。
selenium IDE,早期firefox下的插件,支持瀏覽器的腳本錄制與回放,存在於selenium1和2的版本下,后被淘汰
selenium+webdriver,市場有需求,谷歌牽頭搞出來,是從selenium2開始一直持續至今,最常用,后期應該會有變化,微軟2020年新出的playwright框架已經集成了各瀏覽器的驅動,不依賴driverl了,不需要我們再考慮webdriver和瀏覽器的適配問題
seleniumIDE 4.0版本,團隊一直沒有放棄IDE研發,可以完全支持多種瀏覽器的腳本錄制,純英文,還不火
selenium Grid,分布式的概念,企業用的不多,但很重要。可以將原有的自動化測試框架從單體服務模式轉變為M/S(主從節點)形態的分布式架構形式來實現,可以結合用例並發的模式來存在,比如需要同時起500個瀏覽器,一台機子肯定不行,同時用100台機子來均攤 ,實現並發,而傳統的線性測試需要一個一個來。
二、selenium底層
2.1 WebDriver是什么?
WebDriver就是一個瀏覽器驅動?其實並不能算是一個驅動,沒有那么高級。 就是一個基於HTTP網絡協議進行數據交互的代理服務。 在selenium+driver+python運行過程中,driver對象的指令的下發內容,已經封裝在selenium源碼中
2.2 底層實現
selenium各種方法的底層其實就是用execute執行各種js
2.3 八種方法的本質
driver.find_element_by_id('kw') # 此類方法底層還是調用find_element,就是個套娃多此一舉
driver.find_element('id', 'kw') # 最基本的,4.0 alpha版本也是推薦這個
driver.find_element(By.ID, 'kw') # 我喜歡這個,不用寫那么多字符串
# 從以下By源碼可以看出,By其實就是將八種方法的字符串封裝成了類屬性
class By(object):
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
三、javascript
1.web自動化測試框架的原理就是通過js來實現對web元素的操作
selenium:它將我們要進行自動化操作的網頁內嵌到它自己的網頁,然后通過腳本語言js去執行自動化操作
自動化測試框(appium,qtp,macaca,roboframework)底層用的也是selenium
接口測試,了解接口的本質,接口的原理,接口發送網絡請求通信的原理,
2.提高我們自動化用例執行的效率和穩定性
時間日歷控件
文件上傳
點擊
輸入
勾選
3.selenium難以實現的操作
a.一些隱藏的按鈕,通過js更改元素的屬性,顯示隱藏的按鈕
b.滾動條
c.前端限制輸入,移除readonly屬性
四、等待
等待的三大方式:
1.強制等待
所有自動化學習者,最先接觸的等待就是強制等待(Sleep)
作用:當代碼運行到強制等待這一行的時候,無論出於什么情況,都強制性等待指定的時間
優勢:簡單入門,調試的一把好手
劣勢:只能夠對單次生效,無法做有效的判斷,會浪費大量的時間
2.隱式等待
藏起來的等待,一次設置,終生有效,針對於當下的WebDriver對象,進行的等待時長的設置直接通過WebDriver對象的implicitly_wait()方法進行設置
作用:對WebDriver對象設置全局等待,每一次操作,如遇到頁面加載,則默認進入隱式等待,如遇元素無法找到,則進入隱式等待,當達到等待最大時長,則繼續進行后續的代碼
優勢:設置一次即可,全局使用,而且等不到不會報錯
劣勢:必須等待頁面加載完成才會進入到后續的操作,或者等待超時再進入后續的操作
3.顯式等待
指名道姓的等,專門用於等待指定的元素對象
通過導入from selenium.webdriver.support.wait import WebDriverWait
優勢:專門用於對指定的某一個元素進行等待