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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM