等待机制:
为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,主要有三种等待时间设置方式。
方式一:
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="安全"]'))
自动化测试相关教程推荐:
2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili
2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili
测试开发相关教程推荐
2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili
postman/jmeter/fiddler测试工具类教程推荐
讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili
2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili
2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili
总结:
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!