程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python自動化測試30】Web自動化之三大等待與三大切換

編輯:Python

文章目錄

  • 一、前言
  • 二、三大等待講解
    • 2.1 初識三大等待方式
    • 2.2 三大等待說明
  • 三、窗口切換

一、前言

本文章主要會講解selenium中的三大等待方式,除此之外下方有系列文章的傳送門,還在持續更新中,感興趣的小伙伴也可以前往查看,話不多說,讓我們一起看看吧~

系列文章:
系列文章1:【Python自動化測試1】遇見Python之美
系列文章2:【Python自動化測試2】Python安裝配置及PyCharm基本使用
系列文章3:【Python自動化測試3】初識數據類型與基礎語法
系列文章4:【Python自動化測試4】字符串知識總結
系列文章5:【Python自動化測試5】列表與元組知識總結
系列文章6:【Python自動化測試6】字典與集合知識總結
系列文章7:【Python自動化測試7】數據運算符知識合集
系列文章8:【Python自動化測試8】流程控制語句講解
系列文章9:【Python自動化測試9】函數知識合集
系列文章10:【Python自動化測試10】文件基礎操作
系列文章11:【Python自動化測試11】模塊、包與路徑知識合集
系列文章12:【Python自動化測試12】異常處理機制知識合集
系列文章13:【Python自動化測試13】類、對象、屬性與方法知識合集
系列文章14:【Python自動化測試14】Python自動化測試基礎與進階練習題
系列文章15:【Python自動化測試15】unittest測試框架的核心概念與作用
系列文章16:【Python自動化測試16】測試用例數據分離
系列文章17:【Python自動化測試17】openpyxl二次封裝與數據驅動
系列文章18:【Python自動化測試18】配置文件解析與實際應用
系列文章19:【Python自動化測試19】日志系統logging講解
系列文章20:【Python自動化測試20】接口自動化測試框架模型搭建
系列文章21:【Python自動化測試21】接口自動化測試實戰一_接口概念、項目簡介及測試流程問答
系列文章22:【Python自動化測試22】接口自動化測試實戰二_接口框架修改及用例優化
系列文章23:【Python自動化測試23】接口自動化測試實戰三_動態參數化與數據偽造
系列文章24:【Python自動化測試24】接口自動化測試實戰四_Python操作數據庫
系列文章25:【Python自動化測試25】接口自動化測試實戰五_數據庫斷言、接口關聯及相關管理優化
系列文章26:【Python自動化測試26】接口自動化測試實戰六_pytest框架+allure講解
系列文章27:【Python自動化測試27】Web自動化測試理論、環境搭建及常見操作
系列文章28:【Python自動化測試28】html基礎語法
系列文章29:【Python自動化測試29】Xpath、軸運算及CSS元素定位詳解

二、三大等待講解

2.1 初識三大等待方式

在selenium中有三種等待方式,分別是強制等待隱性等待以及顯性等待

等待方式的主要作用就是防止元素無法成功定位,有些時候電腦比較卡頓、網頁浏覽器加載緩慢,或者偶爾網絡出現了波動都會導致某個按鈕、圖片的加載速度變慢或者一時半會不加載,但代碼的執行效率是非常快的,這就很可能導致當代碼正在執行時,網頁的浏覽器還處於加載狀態,在頁面中完全看不到某個按鈕或界面,那麼在元素查找的時候自然而然就會失敗,那麼三大等待就是為了解決這個問題的。

2.2 三大等待說明

強制等待: 強制等待顧名思義就是強制性的等待,如果在selenium中設置了強制等待,意味著無論是否找到元素都必須要等待X秒,語法為time.sleep(秒數),例如time.sleep(3) -> 代表強制性等待3秒鐘,通常而言在自動化測試或者是自行開發工具時不會加入time.sleep(),主要原因是等待的不確定時間因素,時間短可能會失敗,時間長可能會造成時間浪費,故此在測試工作上並不經常使用,但強制等待也有優點,能夠在需要調試的時候使用,這樣能夠清晰的展現執行邏輯與步驟。

隱性等待: 由webdriver提供的方法,設置後隱式等待會在全局生效,它不針對某一個元素,即在定位元素時,需要等待頁面全部元素加載完成,才會執行下一個語句。如果超出了設置時間的則拋出異常,語法為:driver.implicitly_wait(秒數) ,但隱性等待有一定的局限性,只能在查找元素的時候使用,只能夠判斷元素是否有成功加載,比如某網站的注冊按鈕為置灰的情況下,那麼隱性等待是無法進行操作,在窗口切換時,也無法使用隱性等待

顯性等待: 顯性等待可以用在不同的場景,比如:等待某個元素是否可以被點擊、某個元素是否可見等等,這是不同於隱性等待的,顯性等待與隱性等待是不沖突的,可以同時存在。顯性等待的固定用法:

""" 顯性等待的用法: 1、設置一個等待器 / 定時器,在這個時間內會一直查找這個元素並且判斷是否符合某一個條件 如果在這期間,符合這個條件,那麼就會執行跳過,如果不符合就會一直做循環操作 2、設置一個條件,當滿足這個條件時就可以跳出循環,如果不滿足就持續等待 """
wait = WebDriverWait(driver, timeout=10, poll_frequency=0.2)
locator = ("xpath", "'//input[@name="server" and @value="281"]'")
# 等待,直到某個條件符合要求 ,先去找到locator元素,然後判斷是否能夠被點擊,如果不能點擊就繼續循環,如果滿足直接點擊繼續執行
new_locator = wiat.until(expected_conditions.element_to_be_clickable(locator))
new_locator.click()
# 元素是否可以被看見
ec.visibility_of_element_located(locator)
# 元素是否被加載
ec.presence_of_element_located()
# 看標題
ec.title_is("百度")
# 一個url是否包含了對應內容
ec.url_contains("http://www.baidu.com")
ketang_el.click()

三、窗口切換

窗口切換顧名思義就是對浏覽器進行窗口切換,有時候我們在進行自動化測試或制作一些Web工具時就需要進行窗口切換,否則在不切換窗口時是無法進行窗口的元素定位,也無法找到對應的操作,在selenium中主要有三種窗口切換的方式:

switch方式: switch方式是固定用法,語法為:driver.switch_to.window(driver.window_handles[索引]),通過下標的方式能夠找到固定的窗口,從而實現切換

iframe方式: iframe相當於是在一個網頁裡嵌套了一個子網頁,我們不能夠直接對子網頁的內容進行定位,需要使用iframe的方式:
1、如果我們發現了一個iframe,我們就需要先進行切換,其中一個的語法為:driver.switch_to.frame("name屬性")
2、另一種方式是先找到需要切換的iframe元素,在通過driver.switch_to.frame(iframe_element)方式尋找
3、如果只有一個iframe的情況下,通過索引非常方便,可以快速尋找,語法為driver.switch_to.frame(0),需要注意的是,大多數情況下,我們不會這麼做,有可能在某些網站後續的迭代中新增iframe,這有可能會導致定位錯誤,從而增加修改代碼、維護代碼的成本。

alert方式: 在一些原始的網頁中,仍然保留著alert的方式,如果進入一個網頁後不關閉alert,那麼網頁內容就無法展示完全,也就沒有辦法進行相關的操作,我們通過driver.switch_to.alert的方式就可以進行切換,注意alert後面沒有括號,然後在使用alert.accept()進行關閉,這樣就可以進行元素定位了


好啦~以上就是本次文章分享的全部內容啦,你學會了嗎?希望能給大家帶來幫助哦!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved