1. 程式人生 > 其它 >app自動化----元素等待方法(顯式等待和隱式等待)

app自動化----元素等待方法(顯式等待和隱式等待)

1.元素等待

如果頁面還沒有完全顯示出來,進行頁面自動化操作的時候,會報找不到元素的錯誤。

之前的解決方式是通過time.sleep() 暫停來實現等待,這種方式簡單粗暴。設定等待多長時間,程式在執行的過程中就會等待這麼長時間。

因為自動化本來就是要比手工測試快。通過使用這種方式進行等待,無形中會浪費很多時間。

2.隱式等待

建立好driver 之後可以設定全域性的全域性的元素等待時間。

比如說設定全域性等待10秒,在程式碼執行的時候,查詢元素,最長等待10秒,如果在第3秒的時候能夠找到元素,那麼剩下的7秒就不再等待。從而提高自動化的執行效率。

driver = webdriver.Remote('
http://127.0.0.1:4723/wd/hub',desired_capabilities=desired_caps) # 設定全域性最長的元素等待時間 driver.implicitly_wait(10)

3.顯示等待

使用隱式等待,可以針對全域性的元素進行設定最長等待時間。優點就是所有的元素等待都會使用最長的等待時間。但是缺點也很明顯,假設設定的全域性等待時間為10秒。那麼如果開發工程師寫的指令碼中元素定位寫錯了,那麼執行的時候肯定找不到這個元素,那麼等待10秒

顯示等待可以設定針對單個元素設定最長等待時間,比如你在做自動化測試的過程中,根據經驗某個元素需要等待比較長的時間才能出來,可以針對單個元素設定最長等待時間。其他元素不會受到影響

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support.wait import WebDriverWait
import selenium.webdriver.support.expected_conditions as EC
from selenium.webdriver.common.by import By

import time

desired_caps = {
    'platformName
': 'Android', # 測試Android系統 'platformVersion': '7.1.2', # Android版本 可以在手機的設定中關於手機檢視 'deviceName': '127.0.0.1:62001', # adb devices 命令檢視 設定為自己的裝置 'automationName': 'UiAutomator2', # 自動化引擎 'noReset': True, # 不要重置app的狀態 'fullReset': False, # 不要清理app的快取資料 'appPackage':"com.sina.weibo", # 應用的包名 'appActivity': ".SplashActivity" # 應用的活動頁名稱 } # 開啟微博 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capabilities=desired_caps) # 每次開啟都有廣告載入介面 # 針對單個元素設定最長的等待時間 wait = WebDriverWait(driver,10) start_time = time.perf_counter() el1 = wait.until(EC.presence_of_element_located((By.ID,"com.sina.weibo:id/rightBtn_wrapper"))) end_time = time.perf_counter() print(f'查詢元素使用時間: {end_time-start_time}s') # el1 = driver.find_element_by_id("") el1.click()