自動化測試
技術手段模擬人工,執行重復性任務,準確率100%,高于人工
selenium
可通過瀏覽器驅動控制瀏覽器,通過元素定位模擬人工,實現web自動化,沒有焦點(把瀏覽器放在最小化依然可以)的情況下依然可以進行,瀏覽器開20個窗口,每個都可以執行自己的代碼
安裝環境配置
Selenium
在pycharm控制臺輸入如下指令安裝selenium第三方庫
pip install selenium
安裝成功
Webdriver瀏覽器驅動安裝
https://googlechromelabs.github.io/chrome-for-testing/
我的chrome版本,大版本是136.0
stable的大版本與我的瀏覽器一致都是136.0
點擊stable,確保chrome版本和chromedriver的大版本(136.0)一致
復制搜索該網址,自動開始下載,將下載后的壓縮包解壓縮后如下
將最上面的驅動文件復制粘貼到自己的pycharm項目下,后續只要輸入相對路徑即可
因為瀏覽器版本號更新的非常頻繁,驅動器不能一更新就重新安裝,因此需要關閉瀏覽器的自動更新 ,ctrl+R進入下面的運行臺,輸入services.msc回車
找到有關谷歌的如下所有谷歌開頭的,啟動類型全部改為禁用
右鍵點擊屬性,找到啟動類型點禁用 ,點擊應用,再點擊確定
?
應用后如下
?再次查看屬性顯示無法自動更新,說明設置禁用成功
此時瀏覽器和瀏覽器驅動都已經具備,自動更新也已經關閉
簡單操作入門
01打開網頁、關閉網頁、瀏覽器
代碼:
from selenium import webdriver # 操作瀏覽器
from selenium.webdriver.chrome.options import Options # 設置谷歌瀏覽器
from selenium.webdriver.chrome.service import Service # 管理驅動
import time#設置+啟動瀏覽器
def set_lauch():#01創建一個用于設置瀏覽器的對象q1q1 = Options()#禁用沙箱-增加兼容性q1.add_argument('--no-sandbox')#保持瀏覽器打開(默認代碼執行完自動關閉)q1.add_experimental_option('detach', True)#02創建瀏覽器a1并啟動瀏覽器a1 = webdriver.Chrome(service=Service('chromedriver.exe'), options=q1)#return用于接收return a1a1 = set_lauch()
#打開指定網址
url = 'https://www.baidu.com'
a1.get(url)
time.sleep(3)#單位s
#只關閉當前標簽頁
a1.close()
#徹底退出瀏覽器,釋放驅動
a1.quit()
結果 :打開三秒自動關閉
02 瀏覽器最大化、最小化
接著上面的代碼
a1.maximize_window()#最大化
time.sleep(2)
a1.minimize_window()#最小化
03瀏覽器打開位置、尺寸(單位像素)
?代碼:
a1.set_window_position(200,0)
a1.set_window_size(600,10)
04瀏覽器截圖&刷新當前網頁
可應用于某個畫面正在變化的網頁,隔幾秒就對這個網頁進行截圖并重新刷新
瀏覽器截圖
代碼:
a1.get_screenshot_as_file('1.png')
截圖如下圖所示,并不是電腦屏幕的截圖,只針對這個瀏覽器頁面的大小的截圖
刷新當前網頁
代碼:
a1.refresh()
Selenium核心功能
元素概念
任何一個網頁都是由各種各樣的元素組成的,如按鈕元素、圖片鏈接元素、文字元素
01元素定位
例:用代碼自動在百度的搜索框中輸入自己想搜索的內容,元素定位的作用就是在百度這個頁面自動定位找到搜索框這個元素
右鍵搜索框->點擊檢查,可快速定位到這個元素的前端代碼
代碼:導入包By
from selenium.webdriver.common.by import By#在元素定位里面需要定位的類型
八大定位
八大定位,如下圖先導入By包以后,By.后面提示出現的8種定位類型如ID、NAME等就是Selenium的核心功能
定位一個元素(ID唯一)
?代碼:后面跟的是在檢查頁面檢查到的搜索框的ID的value值kw
a2 = a1.find_element(By.ID, 'kw')
print(a2)
結果,找到了這個元素
?定位多個元素
代碼:
#07多個元素定位--返回列表
a3 = a1.find_elements(By.ID, 'kw')
print(a3)
定位多個元素返回的是一個列表
02元素交互
1)元素輸入
代碼:
#08元素輸入--發送內容
a2 = a1.find_element(By.ID, 'kw')
a2.send_keys('dafait')
結果 :由代碼自動完成輸入
2)元素點擊
找到百度一下這個按鈕的id如下圖所示為su
代碼:
a2 = a1.find_element(By.ID, 'kw')
a2.send_keys('周杰倫')
a2 = a1.find_element(By.ID,'su')
a2.click()
這里結合上面第一個元素交互操作元素輸入為例,輸入周杰倫并用代碼進行百度一下這個搜索按鈕的自動點擊,得到結果如下圖所示,成功輸入周杰倫并點擊了搜索按鈕返回了百度匹配信息的結果
3)元素清空
操作代碼:
a2.clear()
綜合例子實戰:
實現先在搜索框中輸入周杰倫(不點擊百度一下這個按鈕),操作睡眠兩秒(截圖)后清空搜索框,再輸入周杰倫年輕并點擊百度一下按鈕,操作睡眠兩秒(截圖)
代碼:
a2 = a1.find_element(By.ID, 'kw')
a2.send_keys('周杰倫')
a1.get_screenshot_as_file('周杰倫輸入.png')
time.sleep(2)
a2.clear()
a2.send_keys('周杰倫年輕')
time.sleep(2)
a2 = a1.find_element(By.ID, 'su')
a2.click()
a1.get_screenshot_as_file('周杰倫年輕輸入并點擊.png')
程序代碼自動截圖結果如下圖所示
后續筆記
Selenium Web自動化測試學習筆記(二)--八大元素定位-CSDN博客