appium之三大等待

appium之三大等待

三大等待很奇怪,很多人都爱问,但是说实在的,appUI自动化很少涉及到性能,所以其实只要你愿意等,强制等待和显式等待就够用,毕竟极端情况很少,但是我们还是来了解一下。

强制等待sleep

设置固定休眠时间,单位为秒

缺点:不智能,使用太多的sleep会影响脚本运行速度。

import time
#强制等待三秒
time.sleep(3)

隐式等待implicitly_wait

driver.implicitly_wait(10) #隐式等待10秒

由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

显式等待WebDriverWait

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver:浏览器驱动

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

poll_frequency:检测的间隔步长,默认为0.5s

ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

上述内容,全是抄的,因为我认为我自己想出来的文案没人家牛逼。

接下来我们来看一下在实际调试中如何使用。

import os.path
import time
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as  EC

server = 'http://localhost:4723/wd/hub'
caps = {
    "platformName": "Android",
    "deviceName": "JPF4C19123011893",
    "platformVersion": "10.0",
    "appPackage": "com.czb.webczbdemo",
    "appActivity": "com.czb.webczbdemo.MainActivity",
    "automationName": "uiautomator2",
    "noReset": "true",
    "unicodeKeyboard": "true",
    "resetKeyboard": "true"
}
driver = webdriver.Remote(server, caps)
# 这个就是显式等待,等待最长30秒,然后默认了0.5秒检查一次
wait = WebDriverWait(driver, 30)

# 通过find_element_by_id来获取元素
navigation_button = driver.find_element_by_id("com.czb.webczbdemo:id/webNavigation")
# 点击元素
navigation_button.click()
# 强制等待3秒
time.sleep(3)
# 通过find_element_by_class_name来定位元素
edit_text = driver.find_element_by_class_name("android.widget.EditText")
# 将元素中的内容清空
edit_text.clear()
# 强制等待3秒
time.sleep(3)
# 将新的地址放到输入框中
edit_text.send_keys("https://test-open.czb365.com/redirection/todo/?platformType=92611011&platformCode=18610899775")
# 通过find_element_by_class_name来定位元素
commit_button = driver.find_element_by_class_name("android.widget.Button")
# 点击前往按钮
commit_button.click()
# 隐式等待,在进入新网址之前,等待所有网页元素加载完成,最多等待10秒
driver.implicitly_wait(10)
# 通过find_elements来查找有相同定位信息的一组元素
oilstation = driver.find_elements_by_class_name("android.view.View")
# 将元素信息打印出来
print(oilstation)
# 打印这一组信息的数据类型
print(type(oilstation))
time.sleep(6)
# 通过xpath来定位元素并点击
stationone = driver.find_element_by_xpath("//*[@text='ZZ测试油站就将尽快尽快框架开卡']").click()
time.sleep(3)
# 直接定位到下一步并点击
driver.find_element_by_xpath("//*[@text='下一步']").click()
# 定位toast信息:通过xpath的方式寻找,//代表当前目录下的,*代表所有的,包含了'请选择油枪'文案的元素
please = ("xpath", "//*[contains(@text,'请选择油枪')]")


def get_toast(toast_element):
    # 等待10秒,每0.1秒找一次,until直到这个toast出现,这就是显式等待
    wait_toast = WebDriverWait(driver, 10, 0.1).until(EC.presence_of_element_located(toast_element))
    # 打印toast的文案
    print(wait_toast.text)


get_toast(please)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值