首页 > 其他分享 >Appium自动化(17):Appium常用操作之等待操作

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

时间:2023-05-28 19:32:45浏览次数:38  
标签:webdriver Appium 17 driver appium import 操作 填写 True

等待机制:

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

 

方式一:

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="安全"]'))

 

标签:webdriver,Appium,17,driver,appium,import,操作,填写,True
From: https://blog.51cto.com/YouJeffrey/6366183

相关文章

  • Appium自动化(18):使用appium后安卓手机无法调出键盘解决方法
    问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘。原因:appium调试时,将手机输入法设置成了UnicodeIME注:按键详细操作参考:转载至作者:oscarforever  地址:https://www.cnblogs.com/oscarforever/p/10721774.html解决方法:方法一,手机设置里修改输入法:不同的手机型号......
  • 【VS Code+Qt6】拖放操作
    由于老周的示例代码都是用VSCode+CMake+Qt写的,为了不误导人,在标题中还是加上“VSCode”好一些。上次咱们研究了剪贴板的基本用法,也了解了叫QMimeData的重要类。为啥要强调这个类?因为接下来扯到的拖放操作也是和它有关系。哦,对了,咱们先避开一下主题,关于剪贴板,咱们还要说......
  • 「BJOI2017」树的难题 TJ+卡题
    「BJOI2017」树的难题TJ+卡题题目大意给定一棵\(n\)个点的树,每条边有颜色,第\(i\)种颜色权值为\(v_i\),共\(m\)种颜色。对于树上一条路径,其权值定义为:经过边的颜色依次组成序列,每个相同颜色段的颜色权值之和。如:颜色序列\(1,2,2,1,1,4\),其权值为\(v_1+v_2+v_1+v_4\)......
  • 转载-如何结合FT2232HL/CMSIS-DAP+Eclipse+OpenOCD软硬件工具使用SWD调试接口在Window
    原文链接:https://blog.csdn.net/zhuwade/article/details/121944736由于我们公司自己需要开发烧录工具,本人通过google搜相关文档和看ARM公司的技术文档,终于实现了这个功能。因为涉及的内容知识点比较多,对于玩嵌入式MCU的小白来说要普及的知识,逐个介绍篇幅会比较长,本文中只介绍......
  • 使用纯Servlet完成单表的CRUD操作
    1. 使用纯粹的Servlet完成单表【对部门的】的增删改查操作。(B/S结构的。)   262. 实现步骤2.1 第一步:准备一张数据库表。(sql脚本)代码在E:\java\course14\CRUD  注意这里我们添加表的方式是dos窗口命令,使用命令source  E:\java\course14\CRUD  路径尽量不要有中文dept.sq......
  • Elasticsearch掰开揉碎第13篇SpringData操作ES基础篇
    引言上一篇主要讲解的是:使用java操作Elasticsearchapi完成常用操作,比如:添加文档、查询文档数据、更新文档数据、删除文档数据、批量添加、批量更新、批量删除、查询指定索引中所有数据、匹配查询\分页查询\排序,匹配查询\高亮显示。本篇主要讲解的是:SpringData简介、一个完整的开发......
  • Elasticsearch掰开揉碎第17篇SpringBoot集成Elasticsearch之索引操作
    引言上一篇主要讲解的是:高亮显示、自定义高亮显示、通过html展示高亮效果。本篇主要讲解的是:创建SpringBoot项目、SpringBoot项目的配置修改、创建配置类、索引的API操作。创建spring项目双击IntelliJIDEA工具创建配置类编辑测试类1、创建索引运行测试类运行结果查看现有的索引可......
  • Elasticsearch掰开揉碎第18篇SpringBoot集成Elasticsearch之文档操作
    引言上一篇主要讲解的是:创建SpringBoot项目、SpringBoot项目的配置修改、创建配置类、索引的API操作本篇主要讲解的是:文档的API操作(创建pojo、导入fastjosn依赖、添加文档、获取文档、获取文档信息、更新文档信息、删除文档信息、批量插入数据、高级查询)本篇文中所有操作,接着在上......
  • Elasticsearch掰开揉碎第11篇java操作ES前期准备
    引言上一篇主要讲解的是:使用eclipse创建普通java项目\maven项目,使用idea创建普通java项目\maven项目。本篇主要讲解的是:使用java操作Elasticsearch的前期准备(创建索引库、设置mapping、插入数据、验证数据、创建maven项目)前期准备之数据1、创建索引库curl-XPUT'http://192.168......
  • RefsUtil 是 Windows 下一款用于管理 REFS 文件系统的实用工具,它提供了丰富的功能和命
    RefsUtil是Windows下一款用于管理REFS文件系统的实用工具,它提供了丰富的功能和命令行界面,可用于创建、修改、检查和修复REFS分区,以及导出和导入数据等操作。以下是一些使用RefsUtil工具的示例:创建REFS分区要创建一个新的REFS分区,可以使用以下命令:CopyCoderef......