目錄
1. selenium的基本原理
2.?selenium環境的搭建步驟
3. 元素的定位和操作
4.元素的基本屬性方法
5.瀏覽器的操作方法
6.三種等待
強制等待
顯示等待
隱式等待
7. 鍵盤與鼠標的操作
?鼠標懸停用
拖拽操作
8.?下拉框元素定位
9.頁面滾動操作
10. 頁面截圖操作
Selenium是一個用于Web應用程序測試的工具,它提供了一套完整的工具來編寫自動化Web應用程序的測試。Selenium測試腳本,并且可以模擬用戶與瀏覽器的交互
1. selenium的基本原理
-
WebDriver:
-
WebDriver是Selenium的核心組件,它是一個接口,用于編寫客戶端程序來控制瀏覽器。
-
WebDriver可以啟動瀏覽器實例,發送命令給瀏覽器,接收瀏覽器的響應。
-
WebDriver支持多種瀏覽器,包括Chrome、Firefox、Internet Explorer、Safari等。
-
-
定位元素:
-
通過各種策略(如id、name、class name、css selector、xpath等)定位頁面上的元素。
-
可以對定位單個元素或元素集合進行操作。
-
-
操作:
-
可以模擬用戶操作,如點擊、輸入文本、拖拽等。
-
可以獲取和設置元素的屬性和值。
-
-
等待:
-
隱式等待(Implicit Wait):WebDriver會在執行命令時自動等待元素可操作。
-
顯式等待(Explicit Wait):通過編寫代碼顯式等待特定條件成立。
-
-
測試腳本:
-
用支持數據驅動測試,從外部文件或數據庫讀取測試數據。
-
支持并發執行測試,可以同時運行多個測試腳本。
-
-
結果驗證:
-
可以驗證頁面元素的狀態,檢查是否符合預期。
-
支持斷言(Assertions),驗證測試結果是否符合預期。
-
2.?selenium環境的搭建步驟
環境安裝??pip install selenium
瀏覽器選擇:支持多種瀏覽器
匹配規則:驅動版本與瀏覽器版本前三位必須一致,版本不匹配將導致代碼無法運行
各版本驅動下載:?chromedriver瀏覽器驅動各版本下載(...113、114、115、116、117、118、119、120、121、122、123、124、125、126、127、128、129、130、131、132、133、134、135、136、137、138、139、140)(原創) - Z哎呀 - 博客園
將下載驅動導入代碼包中
import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#頁面最大化
driver.maximize_window()time.sleep(3)
#關閉驅動對象
driver.quit()
3. 元素的定位和操作
- ID定位:通過元素的id屬性(最常用)
- name定位:通過元素的name屬性
- class定位:通過元素的class屬性(注意class可能有多個值)
- 標簽定位:通過標簽名(不推薦,難以保證唯一性)
- link_text:精準匹配超鏈接文本
- partial_link_text:模糊匹配超鏈接文本
- CSS選擇器:通過CSS表達式定位
- XPath:通過XML路徑表達式定位
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#頁面最大化
driver.maximize_window()#driver.find_element(By.ID,"kw").send_keys("李")#定位標簽超鏈接的方式
#driver.find_element(By.LINK_TEXT,"新聞").click()
#模糊定位
#driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")time.sleep(3)
#關閉驅動對象
driver.quit()
4.元素的基本屬性方法
5.瀏覽器的操作方法
#設置瀏覽器的分辨率(寬高)
driver.set_window_size(600,600)
#設置瀏覽器的相對位置
driver.set_window_position(100,600)
#瀏覽器的刷新
driver.refresh()
#瀏覽器的前進
driver.forward()
#瀏覽器的回退
driver.back()
#關閉瀏覽器的整個頁面
driver.quit()
#關閉瀏覽器的當前頁面
driver.close()
#頁面標題
print(driver.title)
#頁面當前網址
print(driver.current_url)
6.三種等待
強制等待
顯示等待
導入模塊
-
導入 WebDriverWait 類:
-
WebDriverWait
類用于顯式等待(Explicit Wait),它允許你指定一個條件,當該條件滿足時繼續執行腳本。這有助于處理頁面加載或元素出現時的延遲問題。
-
-
導入 expected_conditions 模塊:
-
expected_conditions
模塊包含一組預定義的條件,這些條件用于與 WebDriverWait 一起使用。這些條件定義了各種等待條件,如元素是否可見、是否可點擊等。
-
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
在設定時間內,不間斷的時間點去定位元素
一旦元素被加載出來,就會被定位到元素,然后執行操作
如果在有效時間內沒有定位到元素,那么程序會報錯: 超時錯誤TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#頁面最大化
driver.maximize_window()#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")
driver.find_element(By.XPATH,'//*[@id="su"]').click()el1 = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="s_tab_inner"]/a[2]/span')))
el1.click()time.sleep(3)
#關閉驅動對象
driver.quit()
隱式等待
driver.implicitly_wait(3)
driver.find_element(By.XPATH,'//*[@id="s_tab_inner"]/a[2]/span')
元素第一次被定位的時候如果能夠定位到,那么不會觸發隱式等待,如果定位不到才會觸發隱式等待的有效時間
可是設置隱式等待的有效時長,如果在有效時長里定位元素,那么不會報錯,反之會報錯提示,沒有找到鈣元素的異常: NoSuchElementException
7. 鍵盤與鼠標的操作
需要從webdriver包中導入Keys類
from selenium.webdriver.common.keys import Keys
輸入"美女"文本:element1.send_keys("美女")
全選內容:element1.send_keys(Keys.CONTROL + 'a')
復制內容:element1.send_keys(Keys.CONTROL + 'c')
刪除內容:element1.send_keys(Keys.BACKSPACE)
輸入"帥哥"文本:element1.send_keys("帥哥")
再次全選:element1.send_keys(Keys.CONTROL + 'a')
粘貼內容:element1.send_keys(Keys.CONTROL + 'v')
清空內容:element1.clear()
常用鼠標操作方法
從selenium.webdriver導入ActionChains類,該類提供多種鼠標操作方法
- 右擊操作:使用context_click()方法,傳入目標元素參數
- 雙擊操作:使用double_click()方法,傳入目標元素參
?鼠標懸停用
element = driver.find_element_by_id("element_id") # 定位元素
ActionChains(driver).move_to_element(element).perform() # 鼠標懸用到元素上
拖拽操作
從selenium.webdriver導入ActionChains類,該類提供多種鼠標操作方法
source = driver.find_element_by_id("source_id") # 源元素
target = driver.find_element_by_id("target_id") # 目標元素
ActionChains(driver).drag_and_drop(source, target).perform() # 從源元素拖拽到目標元素
8.?下拉框元素定位
- 首先需要創建Select類對象
- 通過webdriver.support.select導入Select類
- 傳遞要定位的下拉框元素對象(可通過xpath獲取)
- 索引定位:select_by_index(),下標從0開始
- 文本定位:select_by_visible_text(),通過選項顯示文本
- 值定位:select_by_value(),通過選項的value屬性值
9.頁面滾動操作
通過JavaScript腳本執行滾動操作
- 第一個參數控制左右滾動
- 第二個參數控制上下滾動
- 執行方法:driver.execute_script(js腳本)
10. 頁面截圖操作
方法:driver.get_screenshot_as_file()
僅支持PNG格式
11. 警告框
獲取警告框元素
通過find_element和XPath定位警告框觸發元素,對定位到的元素執行click()操作
- 使用switch_to.alert切入警告框
- 獲取文本:通過alert對象的text屬性獲取提示信息
關閉警告框的方法
使用accept()方法模擬點擊確定按鈕
使用dismiss()方法模擬點擊取消按鈕
即使警告框界面上沒有顯示取消按鈕,調用dismiss()方法仍可取消
輸入型警告框處理
對于需要輸入內容的警告框,使用send_keys()方法