Appium+python自动化4-等待函数
4.1 等待函数癈使用
4.1.1 为什么要使用等待函数
我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个元素,可是我无论怎么定位他都没办法操作,然后报错,这个是怎么个情况呢?因为当我们app打开一个页面的时候我们的appium的运行速度过快那么可能害没有将页面的资源解析完成然后你就去操作了,这样能行吗?肯定不行的,这样不报错谁错呢?所以在很多的时候我们都需要加载等待时间的。那什么时候为每个页面都加载等待时间呢?
4.1.2 什么时候用等待函数
自动化的目的是高效,如果你每个页面都去添加等待时间那么执行下来的效率是不是大大降低了?在加载等待时间时我们需要根据自己的判断去增加,比如一些页面资源较多加载慢了那你肯定需要加的。是不是都是这样呢?其实不是的,下面介绍几种不同类型的等待。
4.2 强制等待
4.2.1 什么是强制等待
故名思义就是你必须给我等,有点耍流氓的意思。比如:我进入到登陆页面,刚好有一个强制等待的函数,那么结果就是无论页面的资源加载完没有你都得给我等着。
4.2.2 强制等待使用
import time
time.sleep(10) #单位秒
备注:调试程序的时候这样写写就好,千万别在实际项目中多用。因为这个time的等待是线程的死等,就是无论如何都会执行这一条语句,如果你在实际项目中去运行那么你会发现效率会很慢。所以实际项目不推荐
4.2.3 强制等待封装
#!/usr/bin/env python
# -*- codinfg:utf-8 -*-
'''
@author: Jeff LEE
@file: 等待函数.py
@time: 2018-07-30 11:08
@desc:
'''
import time
from appium import webdriver
import os def Case(platformName, platformVersion, deviceName, app, appPackage, appActivity):
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
# print getConfig("baseconf", "platformName")
desired_caps = {}
desired_caps['platformName'] = platformName # 设置平台
desired_caps['platformVersion'] = platformVersion # 系统版本
desired_caps['deviceName'] = deviceName # 设备id
# desired_caps['autoLaunch'] = 'true' # 是否自动启动
# desired_caps['noReset'] = 'true'
# desired_caps['newCommandTimeout'] = 20
# desired_caps['app'] = PATH(app) # 安装包路径,放在该py文件的目录下)
desired_caps['appPackage'] = appPackage # 包名
desired_caps['appActivity'] = appActivity # 启动的activity
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
waitFor(5) # 等待函数
def waitFor(t):
time.sleep(t)
4.3 隐式等待
4.3.1 什么是隐式等待
driver.implicitly_wait(10) #单位秒
隐式等待,顾名思义看不见,也可理解为智能等待,从上面函数可以看出,这个等待函数是webdriver提供的一个等待函数,它是针对我们整个driver的。也就是说你只要是用driver去操作一个对象,或者一个元素,当你找不到这个元素或者对象的时候他就会自动的去等待你设置的这个超时时间,如果在超时时间内还没有找到,程序才会报错。
4.3.2 隐式等待封装
#!/usr/bin/env python
# -*- codinfg:utf-8 -*-
'''
@author: Jeff LEE
@file: 等待函数.py
@time: 2018-07-30 11:08
@desc:
'''
import time
from appium import webdriver
import os def Case(platformName, platformVersion, deviceName, app, appPackage, appActivity):
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
# print getConfig("baseconf", "platformName")
desired_caps = {}
desired_caps['platformName'] = platformName # 设置平台
desired_caps['platformVersion'] = platformVersion # 系统版本
desired_caps['deviceName'] = deviceName # 设备id
# desired_caps['autoLaunch'] = 'true' # 是否自动启动
# desired_caps['noReset'] = 'true'
# desired_caps['newCommandTimeout'] = 20
# desired_caps['app'] = PATH(app) # 安装包路径,放在该py文件的目录下)
desired_caps['appPackage'] = appPackage # 包名
desired_caps['appActivity'] = appActivity # 启动的activity
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
waitFor(5) return driver # 等待函数
def waitFor(t):
time.sleep(t) # 隐式等待
def implicit_for_wait(t):
driver = Case(platformName, platformVersion, deviceName, app, appPackage, appActivity)
driver.implicitly_wait(t)
4.4 显示等待
4.4.1 什么是显示等待
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
首先我们来弄明白这个方法里面几个参数的含义:
1、driver:是我们操作的driver。
2、timeout:超时时间,也就是我们找这个元素要找多久
3、poll_frequency:间隔时间,怎么理解?就是说在超时时间内每多少秒去查询一次,默认情况是0.5秒一次
4、ignored_exceptions:异常,就是没有找到程序抛出什么异常。在默认情况是跑出:NoSuchElementException
4.4.2 显示等待封装
#!/usr/bin/env python
# -*- codinfg:utf-8 -*-
'''
@author: Jeff LEE
@file: 等待函数.py
@time: 2018-07-30 11:08
@desc:
'''
import time
import os from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait def Case(platformName, platformVersion, deviceName, app, appPackage, appActivity):
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
# print getConfig("baseconf", "platformName")
desired_caps = {}
desired_caps['platformName'] = platformName # 设置平台
desired_caps['platformVersion'] = platformVersion # 系统版本
desired_caps['deviceName'] = deviceName # 设备id
# desired_caps['autoLaunch'] = 'true' # 是否自动启动
# desired_caps['noReset'] = 'true'
# desired_caps['newCommandTimeout'] = 20
# desired_caps['app'] = PATH(app) # 安装包路径,放在该py文件的目录下)
desired_caps['appPackage'] = appPackage # 包名
desired_caps['appActivity'] = appActivity # 启动的activity
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
waitFor(5) return driver # 等待函数
def waitFor(t):
time.sleep(t) # 隐式等待
def implicit_for_wait(t):
driver = Case(platformName, platformVersion, deviceName, app, appPackage, appActivity)
driver.implicitly_wait(t) #显示等待
def wait(t):
driver = Case(platformName,platformVersion,deviceName,app,appPackage,appActivity)
WebDriverWait(driver, 10,5).until(lambda driver:driver.find_element_by_id("XXXX"))
Appium+python自动化4-等待函数的更多相关文章
- Appium+python自动化8-Appium Python API
Appium+python自动化8-AppiumPython API 前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts conte ...
- appium+python自动化61-中文输入乱码问题解决
前言 在夜神模拟器上输入中文,发现是乱码,将unicodeKeyboard和resetKeyboard参数设置为True了,发现还是没法解决. 打开手机设置语言和输入法,发现找不到Appium And ...
- appium+python自动化52-多点触控MultiAction
前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...
- Appium+python自动化20-查看iOS上app元素属性
前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素 Mac版的appium1.6的 ...
- Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP
前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...
- appium+python自动化50-生成定位对象模板templet(jinja2)
前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...
- Appium+python自动化20-查看iOS上app元素属性【转载】
前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素Mac版的appium1.6的版 ...
- Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP【转载】
前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...
- Appium+python自动化
名称 链接地址 Appium+python自动化8-Appium Python API(上) http://mp.weixin.qq.com/s/WvpT5oRrYY22avI95FuypQ Appi ...
随机推荐
- 利用STM32CubeMX来生成USB_HID_host工程
修改时钟(备注这边使用25mhz的主晶振) 选择debug_level等级为3
- VC编译错误,把类误认为是函数
这段代码是在一个动态库中,我像把这个类导出,于是加上 SC_EXPORTS 宏.class SC_EXPORTS CProtocolCheck{public: CProtocolCheck(void) ...
- 03-body标签中相关标签-2
主要内容: 列表标签 <ul>.<ol>.<dl>表格标签 <table>表单标签 <form> 一.列表标签 列表标签分为三种. 无序列表 ...
- Windows下如何查看某个端口被谁占用
开发时经常遇到端口被占用的情况,这个时候总是很令人抓狂,知道被哪个进程占用还好,结束就是了,要是不知道我们该怎么办呢? 我告诉大家一个方法,^_^. 1. 开始—->运行—->cmd,或者 ...
- 向SqlParameter内动态添加参数
动态向SqlParameter 里添加相应参数,方法如下 先定义一个List,然后再往List里面添加SqlParameter对象,然后将List转为SqlParameter数组即可 List< ...
- linux文本处理笔记
cut: 按列操作文本 sort: 排序 uniq: 去重,去除连续重复行 cut -d 'delimiter' -f start-end filename.txt # -d 表示分割符号,del ...
- js 滑动门的实现
原理:滑动门,这里以图片进行实例,首先设定主盒子div的宽度和高度设定,并进行图片初始化位置的设定,然后将图片绑定事件,并设定要达到的效果 html代码: <!DOCTYPE html> ...
- Sql Server 中由数字转换为指定长度的字符串
一个列的数据类型是 int ,从 1 开始自动增长,另一个列是字符串,现在想把 int 列转换成 九个字符,比如 1 转换后就是 000000001 ,添到字符串列,怎么实现呢? set @imaxU ...
- [ SHELL编程 ] 数组、关联数组和awk数组
本文主要对shell编程中常用的数组.关联数组和awk数组定义.操作以及注意事项做个总结,并提供具体案例. 数组 数组定义:一对圆括号表示数组,数组元素之间用空格符号分割. Array=(val1 v ...
- C语言函数入参压栈顺序为什么是从右向左?
看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...