1、获取 Android app的Activity

打开终端cmd,先cd进入到刚才下载的“新浪.apk”目录下,然后使用aapt dump badging xxx.apk命令获取包内信息。注意,启动类名称一个字母都不能错。

 aapt dump badging 新浪.apk cat>d:/log.txt     这样可以将信息指定到某一文件下然后 查看 

  罪过了,后面发现正常是没有appt.exe 这个应用程序的。可以下载一个放到tools文件下,因为已经配置了环境变量,所以 可以直接使用。

可以从下面拷贝一个到tools下即可。

2、启动微博

#-*-coding:utf-8-*-
#Time:2017/7/20 18:06
#Author:YangYangJun
import time
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0'
desired_caps['deviceName'] = 'N79SIV5PVCSODAQC'
desired_caps['appPackage'] = 'com.sina.weibo'
desired_caps['appActivity'] = 'com.sina.weibo.SplashActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
time.sleep(3)
driver.quit()

3、元素定位

 3.1、appium的webdriver提供了11种元素定位的方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来 
 
 

 多的三个:
      driver.find_element_by_accessibility_id()
      driver.find_element_by_android_uiautomator()
      driver.find_element_by_ios_uiautomation()
      (第三个是ios的专用的)

3.2、下面一一举例进行 介绍

3.2.1、元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作.

uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。

启动uiautomatorviewer.bat

打开目录D:\SProgram\Sdk\tools

双击启动,启动之后出现如下界面

 

如果不喜欢双击启动的话,也可以在cmd里面通过指令启动

先cd到tools目录下,然后输入uiautomatorviewer.bat回车后启动服务

3.2.1、find_element_by_accessibility_id

driver.find_element_by_accessibility_id(u"我的").click()

 

 3.2.2、通过id定位元素
resrouce-id属性是id:
driver.find_element_by_id('username') 

3.2.3、通过name定位元素
text属性是name

driver.find_element_by_name('password')

 

 4、结合公司刚开发出来的app,进行项目实训
#-*-coding:utf-8-*-
#Time:2017/7/21 16:32
#Author:YangYangJun import time
import unittest from appium import webdriver import sys
reload(sys)
sys.setdefaultencoding('utf8') class Login(unittest.TestCase): def setUp(self):
self.desired_caps = {} self.desired_caps['platformName'] = 'Android'
self.desired_caps['platformVersion'] = '6.0'
self.desired_caps['deviceName'] = 'N79SIV5PVCSODAQC'
self.desired_caps['appPackage'] = 'com.xxxx.mrg'
self.desired_caps['appActivity'] = 'com.uzmap.pkg.EntranceActivity'
#隐藏键盘
self.desired_caps['unicodeKeyboard'] = True
self.desired_caps['resetKeyboard'] = True self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
#self.driver.implicitly_wait(15) #测试异常登录-用户不存在 def test_aNoUserLogin(self): driver = self.driver
time.sleep(5)
driver.find_element_by_accessibility_id(u"我的").click() time.sleep(5) driver.find_element_by_accessibility_id(u"登录/注册").click()
time.sleep(2) driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear() time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer1')
time.sleep(2) driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear() time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('') time.sleep(2) driver.find_element_by_accessibility_id(u"登录").click()
time.sleep(18) get_alertMessage = driver.find_elements_by_android_uiautomator('new Uiselector().resourceId("android:id/message")').get_attribute('name')
time.sleep(2)
if get_alertMessage == u'用户不存在':
print u"用户不存在,用例执行成功!"
else:
print u"用例执行失败!" def test_bNoPassLogin(self): driver = self.driver
time.sleep(5)
driver.find_element_by_accessibility_id(u"我的").click() time.sleep(5) driver.find_element_by_accessibility_id(u"登录/注册").click()
time.sleep(2) driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear() time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer')
time.sleep(2) driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear() time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('') time.sleep(2) driver.find_element_by_accessibility_id(u"登录").click()
time.sleep(18) get_alertMessage = driver.find_elements_by_android_uiautomator('new Uiselector().resourceId("android:id/message")').get_attribute('name')
time.sleep(2)
print get_alertMessage[0:5] # if get_alertMessage == u'用户不存在':
# print u"用户不存在,用例执行成功!"
# else:
# print u"用例执行失败!"
# # 测试正常登录 def test_cLogin(self): driver = self.driver
time.sleep(5)
driver.find_element_by_accessibility_id(u"我的").click() time.sleep(5) driver.find_element_by_accessibility_id(u"登录/注册").click()
time.sleep(2) driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear() time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer')
time.sleep(2) driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear() time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('') time.sleep(2) driver.find_element_by_accessibility_id(u"登录").click()
time.sleep(2) # 判断是否登录成功 print driver.find_element_by_accessibility_id(u"西藏医药销售有限公司").get_attribute('name') nickName = driver.find_element_by_accessibility_id(u"西藏医药销售有限公司").get_attribute('name')
temp = nickName[0:2]
print temp
if nickName == u'西藏医药销售有限公司':
print '登录成功!' else:
print '登录失败!' def tearDown(self):
self.driver.close_app()
self.driver.quit() if __name__ == "__main__":
unittest.main()

Python Appium 开启Android测试之路的更多相关文章

  1. Python +appium 封装desired_caps模块

    使用python+appium做android的自动化测试时,首先需要启动appium服务,然后连接上手机,配置如下: desired_caps = {"platformName" ...

  2. Android ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Romer之路

    Android ROM开发(三)--精简官方ROM并且内置ROOT权限,开启Romer之路 相信ROM的相关信息大家通过前几篇的学习都是有所了解了,这里就不在一一提示了,这里我们下载一个官方包,我们还 ...

  3. Python+Appium自动化测试(15)-使用Android模拟器(详细)

    做APP的UI自动化测试时,我们往往会使用真机跑自动化测试脚本,因为这样才是最真实的使用场景.但前期调试脚本的话,可以先使用模拟器,这样相对更加方便. 不推荐使用Android SDK里自带模拟器,太 ...

  4. Windows下部署Appium教程(Android App自动化测试框架搭建)

    摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,a ...

  5. 如何搭建基于C#和 Appium 的 Android自动测试环境

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 如果想做手机端的自动化测试,Appium是首选的测试框架,因为网上使 ...

  6. Python appium搭建app自动化测试环境

    appium做app自动化测试,环境搭建是比较麻烦的. 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎. 但没有成功的环境,就没有办法继续后续的使用. 在app自动化测试当中,我们主要是 ...

  7. python appium笔记(二):元素定位

    #这里的示例是用android来说明的,xpath应该是通用的,resource-id不太清楚,没配过IOS的环境 #环境配置和一些参数的意思不清楚可以看我上一篇python appium笔记(一) ...

  8. Python+Appium环境搭建

    1.python环境搭建,这里就不做过多介绍 2.安装 node.js 2.1.官网下载node.js:https://nodejs.org/en/download/ 2.2.获取到安装文件后,直接双 ...

  9. Appium 在 Android UI 测试中的应用

    原文地址:https://blog.coding.net/blog/Appium-Android-UI Android 测试工具与 Appium 简介 Appium 是一个 C/S 架构的,支持 An ...

随机推荐

  1. ionic 实现微信朋友圈分享的完整开发流程

    最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...

  2. sql xml 入门 (二)

    DECLARE @myDoc xml --http://www.paymob.cn --话费充值api,充值api,话费充值接口,手机话费充值,车贝手机,贝萌手机,移动话费充值,联通话费充值,电信话费 ...

  3. Nginx:论高并发,在座各位都是渣渣

    NGINX 在网络应用中表现超群,在于其独特的设计.许多网络或应用服务器大都是基于线程或者进程的简单框架,NGINX突出的地方就在于其成熟的事件驱动框架,它能应对现代硬件上成千上万的并发连接. NGI ...

  4. nlp homework 03

    NLP Homework 03 --冯煜博 题目描述 (盒子和球模型)假设有3个盒子,每个盒子里装有红白两种颜色的球,盒子里的红白球有下表列出,初始状态分布. 解答 1. 给出HMM模型 \(\mu= ...

  5. python识别图片生成字符模式

    此python文件来自D7哥, 放在这里备份. 用法 python3 PIL\&argparse.py 1.jpg -o test.txt --width 300 --height 300 p ...

  6. linux普通用户提权

    tar通配符注入. echo 'echo "chenglee ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > demo.sh e ...

  7. android官方开发教程解释(一)

    最近准备系统学一下android开发,这里不会照搬原文,只会针对教程中一些难以理解的部分进行解释,我只是个菜鸟. 在教程第一章——入门基础里面,讲解android主题的那个小节,大概会有以下的代码: ...

  8. 20145325张梓靖 《网络对抗技术》 Web安全基础实践

    20145325张梓靖 <网络对抗技术> Web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 XSS攻击:Stored XSS Attacks.Ref ...

  9. vector at()函数比 []运算符操作安全

    转载:https://blog.csdn.net/chenjiayi_yun/article/details/18507659 []操作符的源码 reference operator[](size_t ...

  10. 将svn下载的项目转化为java project

    1.选中项目,右键点击弹出窗口,点击窗口中的[Properties],弹出[Properties for test]窗口, 如下: 2.点击窗口中的[Project Facets],右边显示[Conv ...