Capability配置简介 desired capability的功能是配置Appium会话. Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值. (如:"platformName": "Android")Desired Capabilities主要用于通知Appium服务器建立需要的Session. Session Appium的客户端和服务端之间进行通信都必须在一个Session的上下文中进行.客户端在发…
什么是Capability desired capability的功能是配置Appium会话.他们告诉Appium服务器您想要自动化的平台和应用程序. Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值.(如:"platformName": "Android")Desired Capabilities主要用于通知Appium服务器建立需要的Session. Session Appium的客户端和服务端之间进行通信…
很多刚做自动化的小伙伴,会在ChromeDriver版本选择时犯难,看来大家都被坑过,真正掌握独门绝技,都不是难事儿. 看好了主要步骤就4部 1.确定谷歌浏览器版本 2.找到谷歌浏览器版本与ChromeDriver版本对应关系 3.下载ChromeDriver版本 4.解压并放至正确的位置 5.验证Selenium调用ChromeDriver 找到已安装的谷歌浏览器版本 自己的系统配置(win7 64位,谷歌浏览器64位(70.0)) 查找谷歌浏览器版本与ChromeDriver版本的对应关系…
出处:https://www.cnblogs.com/yoyoketang/p/6128735.html 前言: 环境搭建好了.接下来先体验下如何启动app--1.首先获取包名:2.然后获取launcherActivity.获取这两个关键东西的方法很多,下面我们使用一个sdk自带的实用工具aapt. aapt:Android Assert Packaging Tool,在SDK的build-tools目录下,该工具可以查看apk包名和launcherActivity,当然还有更多功能. 一.下载…
场景 学习了yaml之后就是要将capability的各项参数值与代码分离开. 先创建一个capability.yaml文件,把各项参数存放在其中,然后用load()进行读取. 例子: capability.yaml platformName: Android deviceName: U4KF9HSK99999999 platformVersion: 5.1 appPackage: com.taobao.taobao appActivity: com.taobao.tao.welcome.Wel…
Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,提供了更加优化的图形界面. Appium Desktop是由Simple.Advanced.Presets三个菜单组成的. Simple Host:默认的主机 Port:端口,默认设置为4723 start Server:启动appium sever Advanced 提供了更加高级的配置项,主要是一些Android和iOS设备,log路径等相关信息的配置 Server Address 可设置172.0.0…
配置文件信息log.conf: [loggers]keys=root,simpleExample [logger_root]level=DEBUGhandlers=consoleHandler,fileHandler [logger_simpleExample]level=DEBUGhandlers=consoleHandlerqualname=simpleExamplepropagate=0 [handlers]keys=fileHandler,consoleHandler [handler_…
简介 Appium 是一个开源的自动化测试工具,支持 Android.iOS 平台上的原生应用,支持 Java.Python.PHP 等多种语言. Appium 封装了 Selenium,能够为用户提供所有常见的 JSON 格式的 Selenium 命令以及额外的移动设备相关的控制命令,比如:多点触控手势.屏幕朝向等. 环境 本文主要环境如下: Win7 JDK1.8 Appium Python3.7 android-sdk mumu 模拟器 JDK 下载地址:https://www.oracl…
Yaml简介 Yaml:"Yet Another Markup Language"(是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名. appium中,yaml 是专门用来写配置文件的语言,语言很简洁.强大,格式有点类似于json,感觉要比json强大点. 语法特点: 1.大小写敏感: 2.使用缩进表示层级关系: 3.缩进时不允许使用Tab键,只允许使用空格: 4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可. yaml下载 ht…
问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原生控件进行元素定位,而Web网页是单独的B/S架构,两者的运行环境不同因此需要进行上下文(context)切换,然后对H5页面元素进行定位操作. context 关于应用程序环境的全局信息的接口. 这是一个抽象类,其实现由Android系统提供. 它允许访问特定于应用程序的资源和类,以及对应用程序级…
Toast简介 Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动.和Dialog不一样的是,它永远不会获得焦点,无法被点击. 用户将可能是在中间键入别的东西.Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到. 而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失. 举个例子:下方图片就是淘宝退出app时出现的toast信息 如果用 UI Automation Viewer这个工具是无法定位到的,那么如何进行定位呢? 这个…
appium工作原理 appium 在android端工作流 client端也就是我们 test script是我们的webdriver测试脚本. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol.在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,…
代码实现 参数配置表:desired_caps.yaml platformName: Android deviceName: 192.168.175.101:5555 platformVersion: 5.1 app: C:\Users\bzART\Desktop\app-artmall-release.apk appPackage: com.baozhenart.artmall appActivity: com.baozhenart.artmall.SplashActivity noReset…
基本参数 参数 描述 实例 automationName 自动化测试引擎 Appium或 Selendroid platformName 手机操作系统 iOS, Android, 或 FirefoxOS platformVersion 手机操作系统版本 如: 7.1, 4.4:ios的 9.0 deviceName 手机或模拟器设备名称 android的忽略,ios如iPhone Simulator app .ipa .apk文件路径 比如/abs/path/to/my.apk或http://m…
日志级别 debug.info.warn.error.critical五个级别 logging模块构成(四部分) logger(记录器,用于日志采集) Handler(处理器,将日志记录发送到合适的路径) Filter(过滤器,提供了更好的粒度控制,决定输出哪些日志记录) Formatter(格式化起,指明了日志的格式) logger(记录器) 在使用debug.info.warn.error.critical五个级别之前创建logging实例 方法:basicConfig()为日志记录系统做基…
只要接触到app自动化,难免会遇到许多坑,今天说说解决中文输入的问题. 流程: 进入到淘宝应用,点击搜索栏,输入文字 一开始send_keys(“中文”)时,搜索栏一直没有出现文字,脚本也没有提示报错,后面通过寻找资料,才知道desired_caps中缺少配置 "unicodeKeyboard":True(用unicode编码方式发送字符串) "resetKeyboard":True (键盘隐藏) 脚本运行后得已解决…
appium模拟用户的真实操作,如果用户第一次进入app或许会弹出一些更新提示,或者是引导页面,但是下一次开启app时则没有引导页这些界面,这时,脚本中又肯定不考虑用两套代码来进行维护,此时如何应对这种场景进行处理呢? 比如启动淘宝应用,之前使用这个noReset配置,当默认设置为False,即每次进入都会清除掉session,即有温馨提示弹窗出现,那当设置为True时,第二次进入时,不会有弹窗,那此时再执行原有的脚本就会报错,有人会说用if语句来进行判断,亲测也会出现问题,所以最后还是推荐用t…
元素定位 与web自动化一样,app自动化元素定位也是非常重要的一环,,appium也是提供了很多元素定位的方法,比如:id.name.class.层级定位等等. 元素定位方式 id name class List定位 相对定位 Xpath定位 H5页面元素定位 Uiautomator定位 首先可以进入SDK中的tools文件夹中打开uiautimatorviewer.bat,用于元素定位 测试场景,启动淘宝app,同意温馨提示,进入首页 id定位 Appium中可以使用find_element…
运行app自动化代码时报"Encountered internal error running command: UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server..." 解决方案: 不使用appium默认的端口号 4723,将端口号改为4725,启动可运行.…
出处:https://www.cnblogs.com/yoyoketang/p/6128741.html 前言: 可以打开手机上的app了,下一步元素定位uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击操作. uiautomatorviewer  是android sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的ui来查看应用的布局和组件以及相关的属性. 一.启动uiautomatorviewer.bat 方法…
前言 知道接口测试的小伙伴都应清楚http协议了,如果你还不清楚,那么接口测试做不好,自动化接口就更做不好了.那么做接口测试前先了解下http: HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准.HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等).是一种基于请求与响应模式无连接.无状态的应用层的协议. 一.请求中 request 的组成 1.…
MultiAction MultiAction 是多点触控的类,常用于模拟用户多点操作. 主要包含这add()还有perform()两个方法,模拟多点触控,需要导入TouchAction还有MultiAction两个模块. from appium.webdriver.common.multi_action import MultiAction from appium.webdriver.common.touch_action import TouchAction 加载: 方法add(self,…
TouchAction Touch Action包含一系列操作,比如按压.长按.点击.移动.暂停. 使用TochAction需要先导入对应的模块 from appium.webdriver.common.touch_action import TouchAction 按压 使用到press()方法,通过手指按压手机屏幕的某个位置, press可以是一个元素,也可以接收屏幕的坐标(x,y). press(self, el=None, x=None, y=None) TouchAction(driv…
swipe Appium使用滑动操作用到了swipe方法,定义如下: swipe(self, start_x, start_y, end_x, end_y, duration=None) 从一个点滑动到另外一个点 start_x 是开始滑动的x坐标, start_y 是开始滑动的y坐标 end_x 是结束点x坐标,end_y是结束点y坐标 duration是持续时间,单位毫秒,可以不填,一般设置为500-1000之间吧 #水平向右滑动 比如driver.swipe(100,500,600,500…
元素等待时间 为什么要设置等待时间呢?主要是因为界面加载时,为了防止元素还未出现影响后续的操作. 主要有三种方式:强制(线性)等待.隐式等待.显式等待 适用于appium和selenium 强制(线性)等待 import time #休眠5秒钟 time.sleep(5) 隐式等待 只能设置一个元素等待时间,针对全局元素有效 driver.implicitly——wait(10) 显式等待 主要针对某个元素来设置的等待时间 WebDriverWait(driver, timeout, poll_…
name定位 driver.find_element_by_name('飞利浦净水').click() 测试结果报错:selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'name' is not supported for this session 一开始以为写错了,后面通过搜索资料才知道,name这个定位方法,appium从1.5版本后就已经抛弃了... 所以可以通过其他定位方式来完成.…
1.打开 uiautomatorviewer同步的的时候突然报错 Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException 解决:试了很多方法,重新开启uiautomatorviewer也没有解决,最后进入手机终端中,开发者模式,关闭再开启usb调试,就解决了~ 2.error: Chromedriver: Chromedriver exited unexpectedly with code nul…
用pycharm工具进行编写,运行一个开启淘宝app实例 from appium import webdriver desired_caps = { "platformName": "Android", "platformVersion": "5.1", "deviceName": "U4KF9HSK99999999", #真机设备名称 通过adb devices获取 "app…
使用的夜神模拟器,使用android5.1.1 第一坑:使用的android7.1.2,刚开始写好了登录的代码,需要的是滑屏进入到登录界面,结果运行的时候,没有自动滑屏就报错:因为运行时,报了一个进程被另一个程序在使用,怀疑是这个原因,又改了在进行滑屏前强行等待了几秒,还是不行:截其他界面的元素,也经常报一个UI的错,百度说这个是android的问题,后来我改了夜神模拟器的版本5.1.1,运行正常,滑屏正常! #后续会不断的进行更新,不断的入坑.…
屏幕截图 主要是为了程序出现错误时,开发除了可以分析日志之外,还可以进行截图更好地去定位问题. 截图一般有两种方法: 第一种save_screenshot(self,filename) driver.back() driver.save_screenshot('toast.png') 保存至当前的文件夹中 第二种get_screenshot_as_file(self,filename) #保存路径 driver.get_screenshot_as_file('C:\\Users\\Pycharm…