網站首頁 編程語言 正文
1、強制等待(sleep)
from time import sleep sleep(3) # 強制等待3秒
缺點:由于Web加載的速度取決于測試的硬件、網速、服務器的響應時間等因素。如果等待時間太長,容易造成時間浪費,如果等待時間太短又可能會造成在web還沒有加載完所需要定位的element,而出現報錯。
由于等待時間無法確定,使用太多的sleep會影響運行速度,大大地降低效率,所以建議測試中盡量少使用強制等待。
2、隱式等待 ( implicitly_wait)
# 隱式等待10s driver.implicitly_wait(10)
簡介:隱式等待是全局的是針對所有元素,設置等待時間如10秒,如果10秒內出現,則繼續向下,否則拋異常。可以理解為在10秒以內,不停刷新看元素是否加載出來。
使用場景:隱式等待只需要聲明一次,一般在打開瀏覽器后進行聲明。聲明之后對整個drvier的生命周期都有效,后面不用重復聲明。隱式等待存在一個問題,那就是程序會一直等待整個頁面加載完成,也就是一般情況下你看到瀏覽器標簽欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在加載完成了,但是因為個別js之類的東西特別慢,仍得等到頁面全部完成才能執行下一步。
3、顯示等待 ( expected_conditions)
簡介:顯示等待是單獨針對某個元素,設置一個等待時間如5秒,每隔0.5秒檢查一次是否出現,如果在5秒之前任何時候出現,則繼續向下,一般需要配合該類的 until() 和 until_not() 方法一起用,直到超過設置的最長時間,然后拋出超時錯誤 TimeoutException,以下介紹幾個最常用的方法:
1. 判斷element是否可見:visibility_of_element_located(locator) (可見代表element非隱藏,并且element寬和高都不等于 0)
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By # 示例 target = EC.visibility_of_element_located(By.ID,'user') ? # 配合until()使用(等待元素可見) # 5表示 最長超時時間,默認以秒為單位; 1表示檢測的間隔步長,在等待期間,每隔一定時間(默認0.5秒),調用until或until_not里的方法,直到它返回True或False. WebDriverWait(driver, 5, 1).until(EC.visibility_of_element_located(By.ID,'user')) # 配合until_not()使用(等待元素不可見) WebDriverWait(driver, 5, 1).until_not(EC.visibility_of_element_located(By.ID,'user')) ? # 在類中封裝為一個函數 ? ? def wait_eleLocated(self, loc, timeout=30, poll_frequency=0.5, model=None): ? ? ? ? """ ? ? ? ? :param loc:元素定位表達;元組類型,表達方式(元素定位類型,元素定位方法),示例:(By.ID, "kw") ? ? ? ? :param timeout:超時時間 ? ? ? ? :param poll_frequency:輪詢頻率 ? ? ? ? :param model:等待失敗時,截圖操作,圖片文件中需要表達的功能標注 ? ? ? ? :return:None ? ? ? ? """ ? ? ? ? self.logger.info(f'等待"{model}"元素,定位方式:{loc}') ? ? ? ? try: ? ? ? ? ? ? start = datetime.now() ? ? ? ? ? ? WebDriverWait(self.driver, timeout, poll_frequency).until(EC.visibility_of_element_located(loc)) ? ? ? ? ? ? end = datetime.now() ? ? ? ? ? ? self.logger.info(f'等待"{model}"時長:{end - start}') ? ? ? ? except TimeoutException: ? ? ? ? ? ? self.logger.exception(f'等待"{model}"元素失敗,定位方式:{loc}') ? ? ? ? ? ? # 截圖 ? ? ? ? ? ? self.save_webImgs(f"等待元素[{model}]出現異常") ? ? ? ? ? ? raise
2. 判斷某個element是否被加載到dom樹:presence_of_element_located(locator) (并不代表該element一定可見)
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By ? target = EC.presence_of_element_located(By.ID,'user')
3. 判斷某個element中是否可見并且可點擊:element_to_be_clickable(locator)
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By ? target = EC.element_to_be_clickable(By.ID,'user')
4. 判斷某個element是否被選中:element_to_be_selected(element) (一般用在下拉列表)
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By ? element = driver.find_element_by_class_name('selector') EC.element_to_be_selected(element)
原文鏈接:https://blog.csdn.net/jiangjunsss/article/details/122930625
相關推薦
- 2022-05-03 python實現跨進程(跨py文件)通信示例_python
- 2022-01-09 出現Got permission denied while trying to connect to
- 2024-01-30 在 Jenkins 中使用 SSH Servers 配置文件上傳路徑
- 2022-10-24 React報錯之Parameter?event?implicitly?has?an?any?type
- 2023-01-14 Linux命令行查看cpu(lm_sensors)和顯卡溫度(nvidia-smi)的操作方法_li
- 2022-04-08 Android實現一個簡單的單詞本_Android
- 2023-01-20 Python輸入圓半徑,計算圓周長和面積的實現方式_python
- 2022-11-19 如何解決error: failed to push some refs to 'xxx(遠程庫)'
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支