1 介紹
Selenium是一個用于Web應(yīng)用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。
支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等
這個工具的主要功能包括:測試與瀏覽器的兼容性——測試應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測試系統(tǒng)功能——創(chuàng)建回歸測試檢驗軟件功能和用戶需求。
中文教程:http://www.selenium.org.cn/
2 入門準(zhǔn)備
1、安裝
pip install selenium
2、下載瀏覽器驅(qū)動
(1)谷歌驅(qū)動
http://chromedriver.storage.googleapis.com/index.html
# linux chrome
https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
(2)火狐驅(qū)動
https://github.com/mozilla/geckodriver/releases/
3、測試代碼
可以指定路徑,或?qū)Ⅱ?qū)動放到當(dāng)前文件夾
from selenium import webdriver
url = "https://www.baidu.com/"
# 加載驅(qū)動
# driver = webdriver.Firefox() # Firefox瀏覽器
# driver = webdriver.Firefox("驅(qū)動路徑")
driver = webdriver.Chrome() # Chrome瀏覽器
# driver = webdriver.Ie() # Internet Explorer瀏覽器
# driver = webdriver.Edge() # Edge瀏覽器
# driver = webdriver.Opera() # Opera瀏覽器
# driver = webdriver.PhantomJS() # PhantomJS
# 打開網(wǎng)頁
driver.get(url)
3 等待策略
3.1 顯式等待
顯式等待使WebDriver等待某個條件成立時繼續(xù)執(zhí)行,否則在達(dá)到最長事件拋出超時異常(TimeoutException)
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("https://www.baidu.com")
element = WebDriverWait(driver, 3, 0.5).until(
EC.presence_of_element_located((By.ID, "kw"))
)
element.send_keys('python')
driver.quit()
WebDriverWait類有WebDriver提供,在設(shè)置事件內(nèi),默認(rèn)每間隔一段時間檢測一次當(dāng)前頁面元素是否存在,如果超時則未檢測到,則拋出異常。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:瀏覽器驅(qū)動
timeout:最長超時時間,默認(rèn)單位為s
poll_frequency:超時后的異常信息,默認(rèn)情況下拋–NoSuchElementException異常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的說明。
until(method, message=‘’) 調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),直到返回值為True。
until_not(method, message=‘’) 調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),直到返回值為False。
3.2 隱式等待
如果某些元素不是立即可用的,隱式等地啊是告訴WebDriver去等待一定時間后去查找元素。默認(rèn)等待時間為0秒,一旦設(shè)置該值,隱式等待是設(shè)置該WebDriver的實例的生命周期。
from selenium import webdriver
from selenium.webdriver.common.by import By
# 加載驅(qū)動
driver = webdriver.Chrome() # Chrome瀏覽器
url = "https://www.baidu.com/"
driver.set_window_size(1000, 900)
# 隱式等待
driver.implicitly_wait(10) # seconds
driver.get(url)
driver.find_element(By.ID, "kw").clear()
driver.find_element(By.ID, "kw").send_keys("Python")
driver.find_element(By.ID, "su").click()
4 瀏覽器控制
1、控制瀏覽器窗口大小
driver.set_window_size(900, 700)
2、瀏覽器前進(jìn)、后退
driver.forward()
driver.back()
3、刷新
driver.refresh()
5 元素定位
# 通過id 查詢首個滿足條件
driver.find_element(by=By.ID, value="username")
# 通過class 查詢所有滿足條件 [列表形式返回]
driver.find_elements(by=By.CLASS_NAME, value="item")
# 通過TAG_NAME
driver.find_elements(by=By.TAG_NAME, value="a")
driver.find_elements(by=By.TAG_NAME, value="a").get_attribute("href")
參數(shù)一by :By.ID、By.CLASS_NAME、By.NAME
參數(shù)二value: 指定 ID、name或Class的值
4 具體使用
3.1 元素查找、定位
3.3 Webelement常用方法
1、點擊和輸入
driver.find_element(By.ID, "kw").clear() # 清除文本
driver.find_element(By.ID, "kw").send_keys("Python") # 模擬按鍵輸入
driver.find_element(By.ID, "su").click() # 點擊元素
2、提交
模擬輸入框回車操作
新版本中未測試出功能
3、其他
size:返回元素尺寸
text:獲取元素的文本
get_attribute(name):獲取屬性值
is_displayed:設(shè)置元素是否用戶可見
總結(jié):
from selenium import webdriver
# 加載驅(qū)動
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # Chrome瀏覽器
# url = "https://read.douban.com/ebook/7821748/?dcs=search"
url = "https://www.baidu.com/"
driver.set_window_size(900, 700)
# 打開網(wǎng)頁
driver.get(url)
driver.find_element(By.ID, "kw").clear() # 清除文本
driver.find_element(By.ID, "kw").send_keys("Python") # 模擬按鍵輸入
driver.find_element(By.ID, "su").click() # 點擊元素
4 鼠標(biāo)操作
selenium鼠標(biāo)事件用的是ActionChains,在調(diào)用的時候并不會執(zhí)行,而是在perform()方法被調(diào)用后執(zhí)行。
引用 ActionCharins類
from selenium.webdriver.common.action_chains import ActionChains
4.1 單擊/雙擊/鼠標(biāo)右擊
url = "https://www.baidu.com/"
實例:點擊百度圖片超鏈接
from selenium import webdriver
# 引用ActionChains類
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
url = "https://www.baidu.com/"
driver = webdriver.Chrome() # Chrome瀏覽器
# 隱式等待
driver.implicitly_wait(10) # seconds
# 打開網(wǎng)頁
driver.get(url)
rc = driver.find_element(by=By.LINK_TEXT, value="圖片")
# 右擊
# ActionChains(driver).context_click(rc).perform()
# 雙擊
# ActionChains(driver).double_click(rc).perform
# 單擊
ActionChains(driver).click(on_element=rc).perform()
4.2 移動元素
這個測試案例并不是很好,各位大佬如果有的話可以留言。
url = "https://www.baidu.com/"
# 移動元素
element = driver.find_element(By.LINK_TEXT, "圖片")
target = driver.find_element(By.LINK_TEXT, "更多")
ActionChains(driver).drag_and_drop(element, target).perform()
5 鍵盤事件
全選 Ctrol+A :send_keys(Keys.CONTROL, ‘a(chǎn)’)
復(fù)制 Ctrol+C:send_keys(Keys.CONTROL, ‘c’)
剪切 Ctrol+X:send_keys(Keys.CONTROL, ‘x’)
粘貼 Ctrol+V:send_keys(Keys.CONTROL, ‘v’)
鍵盤 F1:send_keys(Keys.F1)
…
鍵盤 F12:send_keys(Keys.F12)
刪除鍵 BackSpace:send_keys(Keys.BACK_SPACE)
空格鍵 Space:send_keys(Keys.SPACE)
制表鍵 Tab:send_keys(Keys.TAB)
Esc鍵 Tab:send_keys(Keys.ESCAPE)
回車鍵 ENTER:send_keys(Keys.ENTER)
5.1 輸入
from selenium import webdriver
# 引入 ActionChains 類
from selenium.webdriver import Keys
# 加載驅(qū)動
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # Chrome瀏覽器
url = "https://www.baidu.com/"
driver.set_window_size(1000, 900)
driver.get(url)
driver.find_element(By.ID, "kw").clear()
driver.find_element(By.ID, "kw").send_keys("Pythonn")
driver.find_element(By.ID, "kw").send_keys(Keys.BACK_SPACE)
5.2 組合按鍵
# Ctrl+a
ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()
6 獲取頁面信息
# 獲取當(dāng)前頁面URL
now_url = driver.current_url
# 獲取當(dāng)前頁面title
title = driver.title
8 在不同窗口和框架之間移動
9 警告框處理
10 下拉選擇框
11 文件上傳
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')
12 cookie操作
WebDriver操作cookie的方法:
get_cookies(): 獲得所有cookie信息。
get_cookie(name): 返回字典的key為“name”的cookie信息。
add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典對象,必須有name 和value 值。
delete_cookie(name,optionsString):刪除cookie信息?!皀ame”是要刪除的cookie的名稱,“optionsString”是該cookie的選項,目前支持的選項包括“路徑”,“域”。
delete_all_cookies(): 刪除所有cookie信息
13 調(diào)用JavaScript代碼文章來源:http://www.zghlxwxcb.cn/news/detail-821631.html
# 獲取網(wǎng)頁標(biāo)題
driver.execute_script('return document.title;')
14 關(guān)閉瀏覽器文章來源地址http://www.zghlxwxcb.cn/news/detail-821631.html
# 關(guān)閉單個窗口
driver.close()
# 關(guān)閉所有窗口
driver.quit()
到了這里,關(guān)于Python Selenium4.3.0(新語法) web自動化測試工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!