一篇文章教你快速弄懂 web自動化測試中的三種等待方式

前言

現在的網頁很多都是動態加載的,如果頁面的內容發生了改變,就需要時間來渲染。在咱們做web自動化測試的時候,由于代碼是自動執行的,代碼在執行的時候,有可能上一步操作而加載的元素還沒加載出來,就會報錯NoSuchElementException,如果報這個錯誤,很有可能定位表達式不對,或者是頁面元素還沒有加載出來。要解決這個問題 我們可以通過設置一些等待機制來提升腳本的穩定性。做web自動化會用到以下三種等待方式,

  • 1,強制等待:time.sleep()

  • 2,隱式等待:?driver.implicitly_wait(10)

  • 3,顯式等待:(等待元素處于某種狀態列入: 存在、可見、可點擊等等)

?

WebDriverWait(driver, 30, 0.2).until(EC.visibility_of_element_located((By.XPATH, '//input[@id="u"]'))
)

接下來我們就來詳細介紹一下三種等待方式的使用。

1、強制等待

強制等待,也就是python中的

time.sleep(),當程序執行到time.sleep()程序會進入休眠狀態(也就是我們所說的等待),當休眠時間過了之后再繼續執行。

使用強制等待的缺點,程序在執行的過程中,不管要操作的元素是否出現,只要執行到

?

time.sleep就會等待,從一定程度上增加了程序的執行時間。

案例:

import time
from selenium import webdriver
driver = webdriver.Chrome()
# 設置隱式等待最大時間為10秒
driver.implicitly_wait(10)driver.get("http://www.baidu.com")

2、隱式等待

隱式等待:給driver對象設置一個全局的等待時間,在driver對象的整個生命周期中都有效。不管是通過driver查找元素,還是對元素進行一些其他的操作, 如果元素不存在,隱式等待會讓driver等待一定的時間后再才是查找某元素。每隔一段時間就去看一下,有沒有出現,沒有就繼續等,元素出現了就結束等待,繼續往下執行。如果等待時間超過了設置的最大時間,那么就會拋出等待超時的錯誤!

案例

import time
from selenium import webdriver
driver = webdriver.Chrome()
# 設置隱式等待最大時間為10秒
driver.implicitly_wait(10)driver.get("http://www.baidu.com")

?

3、顯式等待

顯式等待:通常用于等待元素處于某個特定的狀態。在很多時候,隱式等待無法滿足我們的需求,比如,頁面元素已存在,但是處于不可見狀態,這個時候無法對元素進行相關的操作,這個時候我們就需要通過顯式等待去等待元素處于可見狀態了。

(一)、顯式等待的基本使用

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# =============步驟拆解================
# 第一步:創建一個等待對象
wait = WebDriverWait(driver, 30, 0.2)
# 第二步:定義元素查找對象
# located = ("定位方式",'定位表達式')
# 比如通過xpath
located = (By.XPATH, '//input[@id="u"]')
# 第三步: 定位的等待條件
conditions = EC.visibility_of_element_located(located)
# 第四步:通過等待計時器對象去找
wait.until(conditions)# ============一行代碼==================
WebDriverWait(driver, 30, 0.2).until(EC.visibility_of_element_located((By.XPATH, '//input[@id="u"]'))
)

(二),顯示等待常用的條件

總結:

  • 強制等待:傻瓜式等待方式,不智能
  • 隱式等待:全局通用,只需設置一次,很智能(等到了就走,不會浪費時間),不足之處只能用來查找元素,等待元素是否能找到。
  • 顯式等待:等待元素處于特定條件的時候使用,很智能(等到了就走,不會浪費時間)
  • 問題:工作中什么時候用隱式等待,什么時候用顯式等待?
  • 隱式是通用的,創建好driver之后就就設置好,如果隱式等待代碼出錯了,根據錯誤的條件,加上對應的顯式等待。
  • 問題:為什么要加等待?
  • 提高程序的穩定性(不會因為網絡等原因,頁面加載元素慢,找不到元素,代碼執行報錯)

感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

?

?

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!有需要的小伙伴可以點擊下方小卡片領取?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214232.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

配置本地端口鏡像示例(1:1)

本地端口鏡像簡介 本地端口鏡像是指觀察端口與監控設備直接相連,觀察端口直接將鏡像端口復制來的報文轉發到與其相連的監控設備進行故障定位和業務監測。 配置注意事項 觀察端口專門用于鏡像報文的轉發,因此不要在上面配置其他業務,防止鏡像…

建筑學VR虛擬仿真情景實訓教學

首先,建筑學VR虛擬仿真情景實訓教學為建筑學專業的學生提供了一個身臨其境的學習環境。通過使用VR仿真技術,學生可以在虛擬環境中觀察和理解建筑結構、材料、設計以及施工等方面的知識。這種教學方法不僅能幫助學生更直觀地理解復雜的建筑理論&#xff0…

記錄 | ubuntu源碼編譯安裝/更新boost版本

一、卸載當前的版本 1、查看當前安裝的boost版本 dpkg -S /usr/include/boost/version.hpp通過上面的命令,你就可以發現boost的版本了,查看結果可能如下: libboost1.54-dev: /usr/include/boost/version.hpp 2、刪除當前安裝的boost sudo …

記錄 | 使用samba將ubuntu文件夾映射到windows實現共享文件夾

一、ubuntu配置 1. 安裝 samba samba 是在 Linux 和 UNIX 系統上實現 SMB 協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議。 sudo apt-…

Excel COUNT類函數使用

目錄 一. COUNT二. COUNTA三. COUNTBLANK四. COUNTIF五. COUNTIFS 一. COUNT ?用于計算指定范圍內包含數字的單元格數量。 基本語法 COUNT(value1, [value2], ...)?統計A2到A7所有數字單元格的數量 ?統計A2到A7,B2到B7的所有數字單元格的數量 二. COUNTA ?計…

大數據分析與應用實驗任務十一

大數據分析與應用實驗任務十一 實驗目的 通過實驗掌握spark Streaming相關對象的創建方法; 熟悉spark Streaming對文件流、套接字流和RDD隊列流的數據接收處理方法; 熟悉spark Streaming的轉換操作,包括無狀態和有狀態轉換。 熟悉spark S…

Linux 驅動開發需要掌握哪些編程語言和技術?

Linux 驅動開發需要掌握哪些編程語言和技術? 在開始前我有一些資料,是我根據自己從業十年經驗,熬夜搞了幾個通宵,精心整理了一份「Linux從專業入門到高級教程工具包」,點個關注,全部無償共享給大家&#xf…

1. mycat入門

1、mycat介紹 Mycat 是一個開源的分布式數據庫系統,但是由于真正的數據庫需要存儲引擎,而 Mycat 并沒有存 儲引擎,所以并不是完全意義的分布式數據庫系統。MyCat是目前最流行的基于Java語言編寫的數據庫中間件,也可以理解為是數據…

鴻蒙HarmonyOS4.0 入門與實戰

一、開發準備: 熟悉鴻蒙官網安裝DevEco Studio熟悉鴻蒙官網 HarmonyOS應用開發官網 - 華為HarmonyOS打造全場景新服務 應用設計相關資源: 開發相關資源: 例如開發工具 DevEco Studio 的下載 應用發布: 開發文檔:

3易懂AI深度學習算法:長短期記憶網絡(Long Short-Term Memory, LSTM)生成對抗網絡 優化算法進化算法

繼續寫:https://blog.csdn.net/chenhao0568/article/details/134920391?spm1001.2014.3001.5502 1.https://blog.csdn.net/chenhao0568/article/details/134931993?spm1001.2014.3001.5502 2.https://blog.csdn.net/chenhao0568/article/details/134932800?spm10…

LeetCode 1631. 最小體力消耗路徑:廣度優先搜索BFS

【LetMeFly】1631.最小體力消耗路徑:廣度優先搜索BFS 力扣題目鏈接:https://leetcode.cn/problems/path-with-minimum-effort/ 你準備參加一場遠足活動。給你一個二維 rows x columns 的地圖 heights ,其中 heights[row][col] 表示格子 (ro…

視頻如何提取文字?這四個方法一鍵提取視頻文案

視頻如何提取文字?你用過哪些視頻提取工具?視頻轉文字工具,又稱為語音識別軟件,是一款能夠將視頻中的語音或對話轉化為文字的實用工具。它運用了尖端的聲音識別和語言理解技術,能精準地捕捉視頻中的音頻,并…

弧形導軌的工作原理

弧形導軌是一種能夠將物體沿著弧形軌道運動的裝置,它由個弧形軌道和沿著軌道運動的物體組成,弧形導軌的工作原理是利用軌道的形狀和物體的運動方式來實現運動,當物體處于軌道上時,它會受到軌道的引導,從而沿著軌道的弧…

Nginx正則表達式

目錄 1.nginx常用的正則表達式 2.location location 大致可以分為三類 location 常用的匹配規則 location 優先級 location 示例說明 優先級總結 3.rewrite rewrite功能 rewrite跳轉實現 rewrite執行順序 語法格式 rewrite示例 實例1: 實例2&#xf…

生活小記錄

上個月項目總算上線了,節奏也慢慢調整正常。發現自己好久沒有記錄生活點滴了,正好寫寫。其實,最近這段日子發生的事情還是挺多的。 流感 媳婦11.24得流感,這件事情特別好笑,大晚上她和我妹妹想喝酒試試,結…

【Python必做100題】之第六題(求圓的周長)

圓的周長公式:C 2 * pi * r 代碼如下: pi 3.14 r float(input("請輸入圓的半徑:")) c 2 * pi *r print(f"圓的周長為{c}") 運行截圖: 總結 1、圓周長的公式:C 2 * pi * r 2、輸出結果注意…

webrtc 工具類

直接上代碼;webrtc 工具類 package com.example.mqttdome;import android.app.Activity; import android.content.Context; import android.content.Intent; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionMa…

API低代碼開發平臺的實際應用及好處

API低代碼開發平臺是一種快速開發工具,可以幫助企業快速構建和部署應用程序,并提供易于使用的API集成。 實際應用 API低代碼開發平臺的應用范圍非常廣泛,包括但不限于以下幾個方面: 企業級應用程序開發:API低代碼開發…

TypeScript中的類型縮小、類型謂詞

一. 概覽 TypeScript中的類型縮小的方式有typeof、in等方式進行類型縮小。 二. 類型縮小 typeof function test(a: string| number | string []) {if(a) {if(typeof a string) {} else if(typeof a number) {}} }in關鍵字 nterface ISideBar {hide: () >void }interf…

mybatis-plus查詢的字段和mysql關鍵字重名

先看一下這個 TableField("show") 這個注解表示當前屬性對應在數據庫的字段為show,但是show在mysql中為關鍵字,直接查詢會導致語法錯誤 正確寫法應該是 但寫sql由和mybatis-plus理念相違背, 并且無法輕松創建對應方法&#xff0…