appium快速入门
appium快速入门
使用uiautomatorviewer定位工具
第一步:启动安卓模拟器
本书使用“雷电模拟器”,启动后如下:
启动后,在命令行中检查adb能否连接上该设备。
步骤2:启动Appium桌面
启动后,如下:
step3:准备自动化脚本与待测APK
test_android_contacts.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import pytest
from appium import webdriver
# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
APPIUM_LOCAL_HOST_URL = 'http://localhost:4723/wd/hub'
PLATFORM_VERSION = '5.1.1'
class TestWebViewAndroid():
@pytest.fixture(scope="function")
def driver(self, request):
desired_caps = {
'appPackage': 'com.example.android.contactmanager',
'appActivity': '.ContactManager',
'platformName': 'Android',
'platformVersion': PLATFORM_VERSION,
'deviceName': 'Android Emulator',
'app': PATH('ContactManager.apk')
}
driver = webdriver.Remote(APPIUM_LOCAL_HOST_URL, desired_caps)
def fin():
driver.quit()
request.addfinalizer(fin)
return driver # provide the fixture value
def test_add_contacts(self, driver):
el = driver.find_element_by_accessibility_id("Add Contact")
el.click()
textfields = driver.find_elements_by_class_name("android.widget.EditText")
textfields[0].send_keys("Appium User")
textfields[2].send_keys("someone@appium.io")
assert 'Appium User' == textfields[0].text
assert 'someone@appium.io' == textfields[2].text
driver.find_element_by_accessibility_id("Save").click()
# for some reason "save" breaks things
#alert = driver.switch_to.alert
# no way to handle alerts in Android
driver.find_element_by_android_uiautomator('new UiSelector().clickable(true)').click()
driver.press_keycode(3)
if __name__ == '__main__':
pytest.main()
本实例,使用官方的代码与apk,点击下载:ContactManager.apk
将apk放到与代码相同的目录下
step4:运行测试代码

分析演示
- 连接Appium服务器
在本实例中,appium服务器获得WebDriver实例作为每个用例的初始化条件,放在pytest的fixture中。
代码如下截图
在fixture中,最关键的一句代码是初始化,获得WebDriver实例
python driver = webdriver.Remote(APPIUM_LOCAL_HOST_URL, desired_caps)
初始化时,需要指定command_executor,默认为“ http://127.0.0.1:4444/wd/hub “,此处我们必须指定我们的4723端口,修改为“ http:// localhost:4723 / wd / hub '”
同时,我们还需要通过desired_capabilities参数,设置appium服务器启动时的参数,启动会话的时候是必须提供的。它告诉appium服务器本次测试是启动浏览器还是启动移动设备,是启动andorid还是启动ios,启动android时, app的package是什么,app的activity是什么等。
分析之前的夹具代码之前,需要先掌握好pytest测试框架。这里
request.addfinalizer(fin)表示用例teardown销毁操作。return dirver表示用例setup操作的返回值是一个WebDriver驱动实例。
元素定位
根据text定位el = driver.find_element_by_accessibility_id("Add Contact")
元素操作
点击元素el.click()
分析Appium的加载流程
通过分析Appium Server中的日志,分析Appium的加载流程
1.创建会话Session,通过desired_capabilities设置appium server启动时的参数。
[MJSONWP] Calling AppiumDriver.createSession() with args: [{"appPackage":"com.example.android.contactmanager","appActivity":".ContactManager","platformName":"Android","platformVersion":"5.1.1","deviceName":"Android Emulator","app":"E:\\workspace\\python_learn\\ContactManager.apk"},null,{"firstMatch":[{}],"alwaysMatch":{"appium:appPackage":"com.example.android.contactmanager","appium:appActivity":".ContactManager","platformName":"Android","appium:platformVersion":"5.1.1","appium:deviceName":"Android Emulator","appium:app":"E:\\workspace\\python_learn\\ContactManager.apk"}}]
[BaseDriver] Event 'newSessionRequested' logged at 1537521688377 (17:21:28 GMT+0800 (中国标准时间))
[Appium] Creating new AndroidDriver (v2.7.0) session
[Appium] Capabilities:
[Appium] platformName: Android
[Appium] appPackage: com.example.android.contactmanager
[Appium] appActivity: .ContactManager
[Appium] platformVersion: 5.1.1
[Appium] deviceName: Android Emulator
[Appium] app: E:\workspace\python_learn\ContactManager.apk
[BaseDriver] W3C capabilities {"alwaysMatch":{"platformNa... and MJSONWP desired capabilities [object Object] were provided
[BaseDriver] Creating session with W3C capabilities: {"alwaysMatch":{"platformNa...
[BaseDriver] Session created with session id: 6ec4b5b7-b79c-426c-87ce-017472a07294
- 检查android adb环境,调用android adb 完成基本的系统操作
- 向android上部署bootstrap.jar包并启动
- Forward android的端口到pc机器上
- pc上监听端口,接受请求,使用webdriver协议分析命令并通过forward的端口发送给bootstrap.jar
- bootstrap.jar 接受命令并把命令发给uiautomator或者插桩体系。
appium快速入门的更多相关文章
- 【待考察】Appium使用技巧,助你快速入门移动端自动化!
Appium使用技巧,助你快速入门移动端自动化! 原创: 柠檬班superman 柠檬班软件测试 1月4日 关注并置顶[柠檬班]的小哥哥小姐姐 “猪”年行大运 说说最近研究移动端的自动化 移动端的自动 ...
- Appium自动化(9) - appium元素定位的快速入门
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 快速入门栗子:boss直聘 app ...
- 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝
移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 说到APP自动化测试,Appium可是说是非常流 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
随机推荐
- CodeForces 916D Jamie and To-do List
题意 你需要维护一个任务列表,有 \(q\) 次操作,每次操作形如以下四种: set a x:设置任务 \(a\) 的优先级为 \(x\),如果任务列表中没有 \(a\) 则加进来. remove a ...
- STM32入门系列-STM32最小系统介绍
STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...
- 学会这些CSS,再也不用切图!!!
三角形 利用border-color支持transparent这一特性,隐藏三条边框,实现三角形. <style> .triangle { width: 0; height: 0; bor ...
- python爬虫使用xpath解析页面和提取数据
XPath解析页面和提取数据 一.简介 关注公众号"轻松学编程"了解更多. XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.X ...
- 你说一下对Java中的volatile的理解吧
前言 volatile相关的知识其实自己一直都是有掌握的,能大概讲出一些知识,例如:它可以保证可见性:禁止指令重排.这两个特性张口就来,但要再往深了问,具体是如何实现这两个特性的,以及在什么场景下使用 ...
- 十个Pycharm快捷键——提升效率
一些比较实用的Pycharm的快捷键,提升编写开发效率. 1.解除语法限制 默认情况下,Pycharm会对代码进行检查,包括但不仅限于代码是否有语法错误,是否符合PEP8规范. 如命名检查,如下图 变 ...
- 聊一聊sockmap 以及ebpf
之前聊过tcpdump 抓包原理,tcpdump使用packet 抓包,使用packet_map 完成零拷贝.但是这个零拷贝也有点假,何为假呢?从网卡到内存走的dma,哪能不能直接从dma拷贝到用户空 ...
- 基于FFmpeg的Dxva2硬解码及Direct3D显示(一)
目录 前言 名词解释 代码实现逻辑 前言 关于视频软解码的资料网上比较多了,但是关于硬解可供参考的资料非常之有限,虽然总得来说软解和硬解的基本逻辑一样,但是实现细节上的差别还是比较多的.虽然目前功能已 ...
- psycopg2模块安装问题
我的平台是win10(x64).python3.7,打算通过psycopg2模块来操作Greenplum数据库,我通过pip install psycopg2 安装了psycopg2模块,也提示安装成 ...
- kernel——Makefile, head.S ...
在Makefile中找到的重要信息: (1)连接脚本 通过连接脚本,知道的信息: (1)入口符号 stext (2)入口连接地址 0xC0000000 + 0x00008000 根据入口符号,可以找到 ...