8種元素定位的底層實現
元素操作
瀏覽器常用操作api
元素資訊操作api
滑鼠操作
鍵盤操作
元素等待
下拉框彈出框
滾動條切換frame表單
多視窗切換
截圖cookie 解決驗證碼
解決-回歸測試
專案在發新版本之後對專案之前的功能進行驗證
解決-壓力測試
可以理解多使用者同時去操作軟體, 統計軟體伺服器處理多使用者請求的能力
解決-相容性測試
不同瀏覽器(ie、 firefox、 chrome) 等等
提高測試效率,保證產品質量
需求變動不頻繁
專案周期長
專案需要回歸測試
瀏覽器
安裝瀏覽器驅動
把驅動檔案所在目錄新增到path環境變數中,或者直接放到python安裝目錄, 將python新增到path中
通過pip包工具安裝selenium包
解除安裝 檢視
檢視pip包管理工具安裝的外掛程式或者工具
提示
pycharm 中 安裝 selenium 包
定位方式
1. id
2. name
3. class_name(使用元素的class屬性定位)
4. tag_name(標籤名稱 《標籤名 …/>)
5. link_text(定位超連線 a標籤)
6. partial_link_text(定位超連結 a標籤 模糊)
7. xpath(基於元素路徑)
8. css(元素選擇器)
彙總:1. 基於元素屬性特有定位方式(id,name,class_name)
2. 基於元素標籤名稱定位:tag_name
3. 定位超連結文字(link_text、partial_link_text)
4. 基於元素路徑定位(xpath)
5. 基於選擇器(css)
方法
提示
# 導包
from selenium import webdriver
from time import sleep
# 獲取 瀏覽器物件
driver = webdriver.chrome()
# 獲取url
url = ""
driver.get(url)
# 查詢 使用者名稱元素
username = driver.find_element_by_id("usera")
# 使用者名稱輸入 admin send_keys("內容")
username.send_keys("admin")
# 暫停3秒
sleep(3)
# 退出瀏覽器驅動
driver.quit()
方法
提示
方法
提示
方法
注意
方法
注意
方法
注意 如果有多個值,預設返回第乙個值
id,name,class:依賴於元素這三個對應的屬性,如果元素沒有以上三個屬性,定位方法不能使用。
tag_name:只能找頁面唯一元素,或者 頁面中多個相同元素中的第乙個元素方法
xpath(xml path) 常用的定位策略
路徑 絕對路徑
語法:以單斜槓開頭逐級開始編寫,不能跳級。如:/html/body/div/p[1]/input
相對路徑
語法:以雙斜槓開頭,雙斜槓後邊跟元素名稱,不知元素名稱可以使用*代替。
如: //input 或 // *
路徑結合屬性
語法:在xpath中,所有的屬性必須使用@符號修飾 如://*[@id=『id值』]
路徑結合邏輯(多個屬性)
語法://*[@id=「id值」 and @屬性=『屬性值』]
路徑結合層級
語法://*[@id=『父級id屬性值』]/input
xpath 擴充套件
# 定位id屬性包含 a 的超連結元素
//a[contains(@id,'a')]
# 定位 id屬性以 a 開頭的超連結元素
//a[starts-with(@id,'a')]
css 常用策略
class 選擇器
元素選擇器
屬性選擇器
層級選擇器
css 擴充套件
[屬性^=『開頭的字母』] # 獲取指定屬性以指定字母開頭的元素
# name 屬性以 us 開頭的 元素
[name^='us']
[屬性$=『結束的字母』] # 獲取指定屬性以指定字母結束的元素
# name 屬性以 da 結尾的 元素
[name$='da']
[屬性*=『包含的字母』] # 獲取指定屬性包含指定字母的元素
# class 屬性 包含 el 的元素
[class*='el']
by類:需要導包
# 使用find_element()定位使用者名稱--> id= 'usera'
driver.find_element(by.id, "usera").send_keys("admin")
# 使用find_element()定位密碼--> id = 'passworda'
driver.find_element(by.css_selector,"#passworda").send_keys("123456")
提示
滑鼠事件常用的操作方法
driver = webdriver.firefox()
driver.get(url)
# 例項化並獲取 actionchains類
action = actionchains(driver)
# 獲取使用者名稱元素
username = driver.find_element_by_css_selector("#usera")
# 右擊
action.context_click(username).perform()
drag_and_drop() 拖拽
move_to_element() 懸停
perform() 執行以上事件方法
應用
# 定位 使用者名稱
username = driver.find_element_by_css_selector("#usera")
# 輸入 admin1
username.send_keys("admin1")
# 刪除1
username.send_keys(keys.back_space)
# 全選 admin ctrl+a
username.send_keys(keys.control, "a")
顯示等待
顯示等待與隱式等待區別:
使用select類
提供方法
# 下標定位
el = driver.find_element_by_css_selector("#selecta")
select(el).select_by_index(1)
# value值 定位
select(el).select_by_value("sh")
# 文字定位
select(el).select_by_visible_text("a上海")
操作步驟
處理對話方塊
# 預設返回的alert對話方塊物件
at = driver.switch_to.alert
#同意# at.accept()
# 取消
at.dismiss()
呼叫執行js方法,將設定js語句傳入方法中
iframe或frame只有在主目錄才有相關元素資訊,不回到主目錄,切換語句會報錯
切換步驟
# strftime:將時間轉為字串函式
driver.get_screenshot_as_file("../image/%s.png" % (time.strftime("%y_%m_%d %h_%m_%s")))
案例 步驟
手動獲取登入後的cookies 『bduss』
使用selenium內的add_cookie(name=『bduss』, value=『***x』)
重新整理才能看到效果 driver.refresh()
url = ""
driver.get(url)
driver.add_cookie()
driver.refresh()
iOS XCode自動化編譯相關
原文 usr bin xcodebuild target targetname clean 第二步編譯 usr bin xcodebuild target targetname 第三步打包 xcodebuild target targetname code sign identity iphone ...
自動化測試 引言 自動化之我見
作為開篇,這裡先簡單介紹一下個人情況 本人非計算機專業的本科畢業,從事軟體測試工作一年多了,同樣的,接觸自動化測試領域也有一年了,打算開個部落格把我在工作中所學到與自動化測試有關的東西分享出來。好啦,下面開始說正題 自動化測試自身就是乙個很大的概念。逛過一些測試論壇的童鞋應該會知道qtp和loadr...
自動化測試 web自動化測試
自動化 由機器裝置代替人為完成制定目標的過程 優點 提高工作效率 減少勞動力 產品規格同一標準 批量生產 自動化測試 讓程式代替人為去驗證程式功能的過程,即在預設條件下執行程式系統 流程確定 搭建自動化框架 編寫測試用例,將其轉化為soupui 介面 自動化測試指令碼 執行自動化測試指令碼 輸出執行...