自動化實踐篇丨教你逐步解析Selenium常用API介面
相比於高大上的各種Selenium進階指南,個人認為夯實基礎至關重要,本文以一個個小案例的方式將KPI常用介面的使用進行歸納總結,有條件的同學可以自己練習幾次,相信會有所收穫。
滑鼠操作
實現功能:百度頁面->移動到‘設定’按鈕->右鍵點選/滑鼠雙擊/滑鼠拖拽到元素鬆開。加我VX:atstudy-js 回覆“測試”,同時領取限量軟體測試學習資料哦~~
·首先匯入ActionChains方法
·使用格式:ActionChains(driver).操作(element).perform()
實現程式碼:
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get(')
sleep(2)
#設定按鈕
element=driver.find_element_by_id('s-usersetting-top')
#滑鼠移動到設定按鈕
ActionChains(driver).move_to_element(element).perform()
#滑鼠右鍵點選元素
ActionChains(driver).context_click(element).perform()
#滑鼠雙擊元素
ActionChains(driver).double_click(element).perform()
#滑鼠拖拽到元素鬆開
ActionChains(driver).drag_and_drop(element).perform()
sleep(2)
常見方法:
鍵盤操作
實現功能:百度搜尋框輸入selenium->複製內容->sogo搜尋框貼上內容。
·首先匯入Keys方法
·使用格式:driver.findelementbyid("kw").sendkeys(Keys.CONTROL,'a')
實現程式碼:
#匯入相關包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
#開啟瀏覽器
driver=webdriver.Chrome()
driver.get(')
#定位搜素框->輸入關鍵字—>複製
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')
sleep(2)
#開啟sogo頁面->sogo搜尋框貼上內容
driver.get(")
driver.find_element_by_id("query").send_keys(Keys.CONTROL,'v')
Javascript 使用技巧
js在selenium有許多應用,最主要的有捲軸操作。
實現功能:進入百度搜尋結果頁-》捲軸分別滾到到頂部、底部及指定元素位置。
使用格式:
driver.execute_script('window.scrollTo(0,0)')
實現程式碼:
from selenium import webdriver
from time import sleep
#開啟瀏覽器,進入搜尋頁面
driver=webdriver.Chrome()
driver.get(')
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('wer')
driver.find_element_by_id('su').click()
sleep(3)
#滑動到頁面底部
driver.execute_script('window.scrollTo(0,10000)')
sleep(3)
# 滑動到頁面頂部
driver.execute_script('window.scrollTo(0,0)')
sleep(3)
#滑動到指定元素(透過連結方式)
target = driver.find_element_by_partial_link_text('汽車')
driver.execute_script("arguments[0].scrollIntoView();", target)
sleep(3)
driver.quit()
螢幕截圖
螢幕截圖功能常用的有兩種savescreenshot()及 getscreenshotasfile()。
使用格式:
·self.driver.save_screenshot('baidu.png')
·self.driver.getscreenshotasfile(filepath)
在專案中用到螢幕截圖的地方基本使用場景為測試用例失敗後儲存失敗的截圖,幫助定位問題。
實現功能1:百度搜尋成功後螢幕截圖-透過save_screenshot方法
實現程式碼:
#匯入相關包
from time import sleep
from selenium import webdriver
class Testcase():
#開啟百度
def __init__(self):
self.driver=webdriver.Chrome()
driver.get(')
def test4(self):
self.driver.find_element_by_id('kw').send_keys('nihao ')
self.driver.find_element_by_id('su').click()
sleep(2)
#螢幕截圖
self.driver.save_screenshot('baidu.png')
sleep(2)
if __name__ == '__main__':
case=Testcase()
case.test4()
實現功能2:百度搜尋成功後螢幕截圖,儲存到指定路徑,以當前時間命名
#匯入相關包
from time import sleep
from selenium import webdriver
import os
from time import sleep, time, localtime, strftime
def test4(self):
self.driver.find_element_by_id('kw').send_keys('nihao ')
self.driver.find_element_by_id('su').click()
sleep(2)
#獲取當前時間
str=strftime("%Y-%m-%d-%H-%M-%S",localtime(time()))
#png格式命名
file_name=str+'.png'
#獲取路徑
path=os.path.abspath('screenshot')
#路徑名+檔名拼接
file_path=path+'/'+file_name
#截圖操作
self.driver.get_screenshot_as_file(file_path)
if __name__ == '__main__':
case=Testcase()
case.test4()
ifram切換
應用場景:
在編寫指令碼的時候,經常會發現最熟悉的錯誤“元素定位不到“,此時如果你檢視頁面元素,有可能你會發現元素在>標籤對之間,此時,我們只有先將程式碼驅動切換到frame內部才可定位成功。
使用格式:
實現功能:登入qq郵箱為例,使用者名稱巢狀在iframe彈窗內。
實現程式碼:
from time import sleep
from selenium import webdriver
class Testwindow(object):
def __init__(self):
self.driver=webdriver.Chrome()
self.driver.get(')
self.driver.implicitly_wait(5)
def login(self):
#進入iframe
self.driver.switch_to.frame('login_frame')
sleep(1)
#輸入賬號、密碼
self.driver.find_element_by_id('u').send_keys('635907412@qq.com')
self.driver.find_element_by_id('p').send_keys('wangxinlibingzhi')
self.driver.find_element_by_id('login_button').click()
self.driver.quit()
if __name__ == '__main__':
#例項化類
test=Testwindow()
#呼叫登入功能
test.login()
視窗控制程式碼
應用場景:當單擊主頁上的連結時,將開啟一個新視窗。在新開啟的視窗中,無法執行任何操作,因為焦點仍然在主頁Web驅動程式上。
這時候,我們需要把焦點定位到新開啟的頁面上。
·現獲取所有視窗 a=driver.window_handles
·再獲取最新開啟的視窗driver.switch_to.window(a[-1])
這裡有一點不一樣有時候handles【1】裡面的數字是1或者-1都可以。
實現功能:百度頁面,開啟x超連結,在新視窗下拉捲軸。加我VX:atstudy-js 回覆“測試”,同時領取限量軟體測試學習資料哦~~
實現程式碼:
#匯入相關包
from time import sleep
from selenium import webdriver
#定義一個類
class Testwindow(object):
#定義初始化函式
def __init__(self):
self.driver=webdriver.Chrome()
self.driver.get(')
self.driver.implicitly_wait(5)
#定義初始化函式,開啟x超連結,在新視窗下拉捲軸
def link(self):
self.driver.find_element_by_partial_link_text('2021').click()
#獲取視窗控制程式碼
a=self.driver.window_handles
self.driver.switch_to.window(a[1])
sleep(3)
self.driver.execute_script('window.scrollTo(0,10000)')
sleep(1)
self.driver.quit()
if __name__ == '__main__':
test=Testwindow()
test.link()
警告彈 -alert/confirm/promp
應用場景:有些頁面進入後自帶彈窗提醒功能需要確認,這時候就需要將焦點定位到alert彈窗上。
使用格式:
alert=driver.switchtoalert()
alert.accept()
實現功能:本地新建html檔案,模仿alert/confirm/prompt彈窗,定位彈窗並確認。
實現程式碼:
新建alert.html,生成彈窗效果
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<a href="javascript:alert('提示框')" id="alert">Alert</a><br>
<a href="javascript:confirm('真的要刪除資料麼' )" id="confirm">confirm</a><br>
<a href="javascript:var age = prompt('請輸入資料');document.write(age)" id="prompt">prompt</a><br>
</body>
</html>
#匯入相關包
import os
from time import sleep
from selenium import webdriver
class Testcase(object):
#開啟彈窗頁面
def __init__(self):
self.driver=webdriver.Chrome()
#獲取html頁面路徑地址
path=os.path.dirname(os.path.abspath(__file__))
file_path='file:///'+path+'/test_alert.html'
self.driver.get(file_path)
#alert彈窗
def alert(self):
self.driver.find_element_by_id('alert').click()
#定位到alert彈窗
alert=self.driver.switch_to.alert
#彈窗確認
alert.accept()
sleep(2)
#生成confim彈窗
def confirm(self):
self.driver.find_element_by_id('confirm').click()
confirm=self.driver.switch_to.alert
confirm.accept()
附件上傳
實現功能:拖拽圖片到百度上傳圖片搜尋功能區域。
使用格式:
定位.send_keys(r'圖片路徑')
#匯入相關包
from selenium import webdriver
from time import sleep
#開啟百度
driver=webdriver.Chrome()
driver.get(')
#定位+按鈕
driver.find_element_by_class_name('soutu-btn').click()
sleep(1)
#開啟指定位置的圖片
driver.find_element_by_class_name('upload-pic').send_keys(r'F:\\wx\\PyCharm Community Edition 2018.1.3\\zdh\\1.jpg')
時間等待
常見的時間等待有三種:固定、顯示、隱士。
應用場景:主要用於模擬真實的使用者操作,有時時間過於短,頁面響應不過來,從而造成元素定位不到。
使用格式:
·sleep(3):一般用於除錯
·implicity_wait():隱士等待一般對整個driver週期都適用,使用一次即可
·WebDriverWait(self.driver,2 ).until(EC.title_is('百度一下,你就知道')):這種最常用,一般是指某個元素出現了等待就結束
實現功能:開啟百度頁面,等到頁面標題出現再進行搜尋操作。
程式碼實現:
#匯入包
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#定義一個類
class Testcase(object):
#開啟瀏覽器
def __init__(self):
self.driver=webdriver.Chrome()
self.driver.get(')
#定義函式,實現顯示等待
def test_wait(self):
WebDriverWait(self.driver,2 ).until(EC.title_is('百度一下,你就知道'))
self.driver.find_element_by_id('kw').send_keys('自動化測試')
#呼叫函式
if __name__ == '__main__':
case=Testcase()
case.test_wait()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2765763/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Selenium 自動化最佳實踐技巧 (中)
- API自動化測試實踐API
- 介面自動化測試工程實踐分享
- Selenium自動化實現web自動化-1Web
- 【專題】我們常用的功能自動化測試工具——Selenium篇
- 去哪兒 Api 自動化測試實踐API
- 「乾貨」介面自動化實踐:高效智慧介面場景自動巡檢方案
- 基於postman的api自動化測試實踐PostmanAPI
- 自動化測試selenium在小公司的成功實踐
- 介面自動化測試世界裡的“身份證”—測試工具Jmeter實踐篇JMeter
- Selenium+Java自動化測試常用的方法Java
- 自動化:用selenium發一篇博文
- 介面自動化測試的最佳工程實踐(ApiTestEngine)API
- selenium自動化操作
- 《手把手教你》系列基礎篇(五)-java+ selenium自動化測試- 建立首個自動化指令碼(詳細教程)Java指令碼
- 常用網路介面自動化測試框架框架
- 自動化測試之Selenium篇(一):環境搭建
- [原創]好買財富介面測試自動化實踐
- gulp 前端自動化實踐前端
- 學生資訊管理系統解析之介面實踐篇
- Selenium 自動化測試從零實戰
- titans Selenium 自動化框架框架
- Python3+selenium自動化環境搭建(mac篇)PythonMac
- 【ApiDoc】自動化匯出介面文件之HTML/Markdown/PDF實踐APIHTML
- API自動化測試平臺,高效實現對API的自動化測試API
- 用python實現selenium 自動化測試Python
- 【python+selenium的web自動化】- PageObject模式解析及案例PythonWebObject模式
- selenium java自動化測試Java
- Selenium自動化測試框架框架
- 《手把手教你》系列技巧篇(五十一)-java+ selenium自動化測試-字串操作-下篇(詳解教程)Java字串
- 基於RestAssured實現介面自動化REST
- 介面自動化實戰之框架搭建框架
- Httpclient 介面自動化HTTPclient
- 全自動化介面
- Webpack自動化構建實踐指南Web
- 自動化測試的最佳實踐
- fastlane 自動化打包工具實踐AST
- 自動化測試實踐總結