Appium自动化(17):Appium常用操作之等待操作

等待机制:

  为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,主要有三种等待时间设置方式。

方式一:

sleep():固定等待时间设置,python的time包里提供了休眠方法sleep,导入包后就能使用;

sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数

写法:time.sleep(2)

代码示例:

import time
from appium import webdriver
from appium.webdriver.webdriver import By
from selenium.webdriver.support.wait import WebDriverWait

des = {
    'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.sky.jisuanji',    # 填写被测app包名
    'appActivity':'.JisuanjizixieActivity',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':60        # 30秒没发送新命令就断开连接
       }

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)
# 固定等待 3秒
time.sleep(3)

方式二:(推荐使用)

implicitlyWait():隐式等待是由webdriver提供的超时等待方法,它比 sleep() 方法智能,sleep()方法只能在一个固定的时间等待,而 implicitlyWait() 可以在一个时间范围内等待,称为隐式等待

写法:driver.implicitly_wait(100) 

from appium import webdriver
from appium.webdriver.webdriver import By
from selenium.webdriver.support.wait import WebDriverWait

des = {
    'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.sky.jisuanji',    # 填写被测app包名
    'appActivity':'.JisuanjizixieActivity',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':60        # 30秒没发送新命令就断开连接
       }

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

# (推荐使用)隐式等待:全局设置,它只要设置了,那么下面的代码只要包含了 find_element 方法都会产生等待元素的效果
# 等待机制:每隔500ms 在页面上检查是否出现该元素,如果在指定的时间内都没找到,则报错
driver.implicitly_wait(30)  # 隐式等待
driver.find_element(By.XPATH,'//android.widget.TextView[@text="安全"]').click()
driver.find_element(By.XPATH,'//android.widget.TextView[@text="屏幕锁定"]').click()

方式三:

WebDriverWait():显示等待,由webdriver提供,是针对某个元素来设置的等待时间

语法格式如下:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exceptions=None)

driver:WebDriver的驱动程序(IE,火狐,谷歌或远程)

timeout:最长超时时间,默认以秒为单位

poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)

ignore_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常

写法:

from selenium.webdriver.support.ui import WebDriverWait

element=WebDriverWait(driver,3).until(lambdax:x.find_element_by_css_selector(div.red_box"))

代码示例:

import time
from appium import webdriver
from appium.webdriver.webdriver import By
from selenium.webdriver.support.wait import WebDriverWait

des = {
    'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.sky.jisuanji',    # 填写被测app包名
    'appActivity':'.JisuanjizixieActivity',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':60        # 30秒没发送新命令就断开连接
       }

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

# 显示等待:创建一个显示等待对象  until() 需要一个method作为实参
# 工作机制:默认每隔500ms检查是否出现该元素,默认值可以通过参数自定义poll_frequency
WebDriverWait(driver,30,0.8).until(lambda dr:dr.find_element_by_xpath('//android.widget.TextView[@text="安全"]'))

猜你喜欢

转载自blog.csdn.net/YouJeffrey/article/details/130915949