自動化實踐篇丨教你逐步解析Selenium常用API介面

博為峰網校發表於2021-03-30

相比於高大上的各種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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章