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

 

posted @ 2021-06-21 14:16  Z_sun  阅读(628)  评论(0编辑  收藏  举报