python+Appium自动化:记录遇到的坑】的更多相关文章

使用的夜神模拟器,使用android5.1.1 第一坑:使用的android7.1.2,刚开始写好了登录的代码,需要的是滑屏进入到登录界面,结果运行的时候,没有自动滑屏就报错:因为运行时,报了一个进程被另一个程序在使用,怀疑是这个原因,又改了在进行滑屏前强行等待了几秒,还是不行:截其他界面的元素,也经常报一个UI的错,百度说这个是android的问题,后来我改了夜神模拟器的版本5.1.1,运行正常,滑屏正常! #后续会不断的进行更新,不断的入坑.…
1.打开 uiautomatorviewer同步的的时候突然报错 Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException 解决:试了很多方法,重新开启uiautomatorviewer也没有解决,最后进入手机终端中,开发者模式,关闭再开启usb调试,就解决了~ 2.error: Chromedriver: Chromedriver exited unexpectedly with code nul…
最近在研究appium+appiumlibrary移动端的两个自动化测试库,特此将使用过程,粗略记录一下 1.环境搭建,略,自行百度. 2.查看apk包名及activity方法,自行百度. 3.基本步骤框架 #coding=utf-8 from appium import webdriver import os desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] =…
appium工作原理 appium 在android端工作流 client端也就是我们 test script是我们的webdriver测试脚本. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol.在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,…
日志级别 debug.info.warn.error.critical五个级别 logging模块构成(四部分) logger(记录器,用于日志采集) Handler(处理器,将日志记录发送到合适的路径) Filter(过滤器,提供了更好的粒度控制,决定输出哪些日志记录) Formatter(格式化起,指明了日志的格式) logger(记录器) 在使用debug.info.warn.error.critical五个级别之前创建logging实例 方法:basicConfig()为日志记录系统做基…
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系统提供. 它允许访问特定于应用程序的资源和类,以及对应用程序级…
只要接触到app自动化,难免会遇到许多坑,今天说说解决中文输入的问题. 流程: 进入到淘宝应用,点击搜索栏,输入文字 一开始send_keys(“中文”)时,搜索栏一直没有出现文字,脚本也没有提示报错,后面通过寻找资料,才知道desired_caps中缺少配置 "unicodeKeyboard":True(用unicode编码方式发送字符串) "resetKeyboard":True (键盘隐藏) 脚本运行后得已解决…
元素定位 与web自动化一样,app自动化元素定位也是非常重要的一环,,appium也是提供了很多元素定位的方法,比如:id.name.class.层级定位等等. 元素定位方式 id name class List定位 相对定位 Xpath定位 H5页面元素定位 Uiautomator定位 首先可以进入SDK中的tools文件夹中打开uiautimatorviewer.bat,用于元素定位 测试场景,启动淘宝app,同意温馨提示,进入首页 id定位 Appium中可以使用find_element…
简介 Appium 是一个开源的自动化测试工具,支持 Android.iOS 平台上的原生应用,支持 Java.Python.PHP 等多种语言. Appium 封装了 Selenium,能够为用户提供所有常见的 JSON 格式的 Selenium 命令以及额外的移动设备相关的控制命令,比如:多点触控手势.屏幕朝向等. 环境 本文主要环境如下: Win7 JDK1.8 Appium Python3.7 android-sdk mumu 模拟器 JDK 下载地址:https://www.oracl…
运行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 方法…
出处: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…
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…
Toast简介 Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动.和Dialog不一样的是,它永远不会获得焦点,无法被点击. 用户将可能是在中间键入别的东西.Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到. 而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失. 举个例子:下方图片就是淘宝退出app时出现的toast信息 如果用 UI Automation Viewer这个工具是无法定位到的,那么如何进行定位呢? 这个…
元素等待时间 为什么要设置等待时间呢?主要是因为界面加载时,为了防止元素还未出现影响后续的操作. 主要有三种方式:强制(线性)等待.隐式等待.显式等待 适用于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版本后就已经抛弃了... 所以可以通过其他定位方式来完成.…
appium模拟用户的真实操作,如果用户第一次进入app或许会弹出一些更新提示,或者是引导页面,但是下一次开启app时则没有引导页这些界面,这时,脚本中又肯定不考虑用两套代码来进行维护,此时如何应对这种场景进行处理呢? 比如启动淘宝应用,之前使用这个noReset配置,当默认设置为False,即每次进入都会清除掉session,即有温馨提示弹窗出现,那当设置为True时,第二次进入时,不会有弹窗,那此时再执行原有的脚本就会报错,有人会说用if语句来进行判断,亲测也会出现问题,所以最后还是推荐用t…
用pycharm工具进行编写,运行一个开启淘宝app实例 from appium import webdriver desired_caps = { "platformName": "Android", "platformVersion": "5.1", "deviceName": "U4KF9HSK99999999", #真机设备名称 通过adb devices获取 "app…
Capability配置简介 desired capability的功能是配置Appium会话. Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值. (如:"platformName": "Android")Desired Capabilities主要用于通知Appium服务器建立需要的Session. Session Appium的客户端和服务端之间进行通信都必须在一个Session的上下文中进行.客户端在发…
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_…
屏幕截图 主要是为了程序出现错误时,开发除了可以分析日志之外,还可以进行截图更好地去定位问题. 截图一般有两种方法: 第一种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…
Appium简介 Appium是一个开源的.跨平台的测试框架,主要用来进行app UI自动化,适用于原生应用.混合应用和移动网页应用(H5页面).目前支持Python.JavaScript.Objective C.Java.Ruby.PHP.C#等多种语言. python+appium环境搭建 1,配置python环境 如何在Mac上配置python环境在以前的文章中有记录过,这里就不展开说明啦,有需要的可参考小编的文章:Mac版-python环境配置(一):Python下载安装.Mac版-py…
很多人刚开始使用python+appium去执行APP自动化的时候经常会遇到webdriver.Remote,报错位置指向都是driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub/',desired_caps)这行代码 很容易误导别人错认为是自己的webdriver发生了错误,此时应该如何排查这个问题,以下将举例说明 当发生以下错误的时候 Traceback (most recent call last):File "E:\Workpla…
背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所有奖励,每天领取一个 进度:当前未知登陆后是否还有选择区服弹窗,故当前仅处理到成功点击为止 思路: python+selenium自动化点击,程序定时运行 实现方法:timer_exerice.py编写死循环定时器,30s判断一次是否到达相应时间,若到达时间,开始执行selenium_exerice…
前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件并生成测试报告. 简单实例 实例讲解 一. 项目路径获取 project_name:项目名称,需更换为自己项目的名称 project_path:项目路径,获取思路 os.path.abspath(__file__):获取当前文件路径 split(project_name)[0]:通过项目名切割出项目…