Python学习(七)-----python对Andriod控制

3 篇文章 0 订阅
3 篇文章 0 订阅

Python通过appium对Andriod定位并控制

一、Android第一个脚本

	import unittest
	from appium import webdriver
       desired_caps = dict()
       desired_caps['platformName'] = 'Android'		#系统
       desired_caps['platformVersion'] = '10.0'		#系统版本
       desired_caps['deviceName'] = 'Android Emulator' #使用的手机类型或模拟器类型
       desired_caps['noReset'] = True    					#不需要每次都重新安装
       desired_caps['app'] = PATH('../app.apk')
       desired_caps['automationName'] = 'Uiautomator2'
       driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  #指定到appium desktop所监听的端口
       INTERVAL = 1
       time.sleep(INTERVAL * 5)		#主动等待时间

上诉设置好后,下面就可定位进行操作 .click()等

二、Xpath,通过父、兄、弟节点定位元素

2.1 通过父节点定位元素

(定位元素/parent::父亲属性)
‘//android.widget.TextView[contains(@text=“欢迎观临”)]/parent::android.view.ViewGroup’

但实际可通过如下命令达到,操作父子级别的元素 “/”
操作的是按钮index为2的按钮,下的一个子元素 ImageView
‘//android.widget.Button[@index=“2”]/android.widget.ImageView’

2.2.1 通过兄节点定位元素

(定位元素/preceding-sibling::兄属性,[2]表示往上第二个哥哥)
‘//android.widget.TextView[contains(@text=“标题1”)]/preceding-sibling::android.view.ViewGroup[2]’

2.2.2 通过弟节点定位元素

(定位元素/following-sibling::弟属性,[2]表示往下第二个弟弟
‘//android.widget.TextView[contains(@text=“标题2”)]/following-sibling::android.view.ViewGroup[2]’

实际可通过如下path定位操作…/
表示在任意一个元素下有两个同级元素,TextView与ViewGroup
通过../可定位到一个叫大标题的TextView相邻的ViewGroup元素,并对其操作
‘//android.widget.TextView[@text=“大标题”]/…/android.view.ViewGroup[3]’

2.2.3 跨级别定位,与双条件联合定位

如下命令表示,从任意元素开始;找到一个ViewGroup元素(class实际就是Xpath定位)并且他的index为2,;而后跨过一个为ViewGoup的任意子元素,并且这个子元素下有一个ViewGroup为3的元素。
从而达到,控制元素目的,可以任意组合。
‘//*[@class=“android.view.ViewGroup” and @index=“2”]/android.view.ViewGroup/android.view.ViewGroup[3]’

三、Appium滑动函数:Swipe

Appium处理滑动方法是swipe
滑动API:Swipe(int start x,int start y,int end x,int y,duration)
解释:
int start x-开始滑动的x坐标;
int start y -开始滑动的y坐标 ;
int end x -结束点x坐标;
int end y -结束点y坐标;
duration 滑动时间(默认5毫秒)。

# 导入webdriver控件
from appium import webdriver
# 这里可以get屏幕的长和宽进行百分比控制
_width, _height = self._driver.get_window_size()['width'], self._driver.get_window_size()['height']
# 来进行向上向下向左向右的滑动。
# self 在没有定义类时可不用书写
driver.swipe(_width* 0.5, _height * 0.5, _w * 0.5, _h * 0.7, 1000)

四、python time sleep()方法

sleep()方法语法:上一步完成后,当前等待时间,默认单位0.2s
注:在自动化测试时,包括截屏,定位元素,点击元素的前后,如果经常系统提示找不到控件可使用该方法,来增加代码的通过率。

t = 1 
time.sleep(t)
也可写成为time.sleep(t*n)

五、Xpath定位

  1. 通过EditText定位
    //android.widget.EditText[@text="{}"
  2. 兄弟同级定位
    //android.widget.TextView[@text=“管理”]/…/android.view.ViewGroup[1]
  3. 兄弟向上定位
    //android.widget.TextView[contains(@text=“标题1”)]/preceding-sibling::android.view.ViewGroup[2]
  4. 兄弟向下定位
    //android.widget.TextView[contains(@text=“标题2”)]/following-sibling::android.view.ViewGroup[2]
  5. 父子定位
    //android.widget.TextView[contains(@text=“欢迎观临”)]/parent::android.view.ViewGroup
  6. 跨元素定位,多条件定位
    //*[@class=“android.view.ViewGroup” and @index=“6”]/android.view.ViewGroup/android.view.ViewGroup[1]

六、appium+python按系统按键返回、home键等

代码就一句driver.keyevent()括号内填入的是物理按键的数字代号

from appium import webdriver
当然封装成一个可以输出日志方法,并点击按钮的方法
class PrintJournal :
 def press_keyevent(self, num):
        logging.debug('press keyeven[num:%s]', num)
        self._driver.keyevent(num)
        pass
再调用此方法
self.PrintJournal.press_keyevent('4')
是用返回
也可直接使用括号里放序号,按键钮
press_keyevent('3')  #home
press_keyevent('4')  #f返回

七、总结

7.1 常见问题

  1. 对于配置用例,连接到虚拟机等Appium+python测试app实例
  2. 定位元素也可访问此处详细操作Android定位元素与操作
  3. 在自动化测试时,包括截屏,定位元素,点击元素的前后,如果经常系统提示找不到控件可sleep()该方法,来增加代码的通过率。从而不报错误
  4. 系统按键可访问appium+python怎么按系统按键如按下返回键、home键等等

7.2 总结要素

使用Appium+Python进行自动化操作,软件的核心为:

  1. 编译环境的配置,具体可参考我的往期文章
    Python学习(一)-----环境配置
    JetBrains PyCharm安装
    appium的安装
    appium就在我发文章的这天,已经由V1.15.1,提示我升级到V1.17.1。应该无太大变动
  2. Python的运行主要依赖于 selenium+webdriver工具可参考如下
    pyhton启动网页的环境搭建,以及运行第一个网页
  3. 测试实例的建造
    可以把测试用例,以及将常用方法封装自定义类,并有一定的体系。
  4. 元素的定位
    可能开始是不好寻找控件,但当熟练后,这就是核心,找到空间并控制它。

通过PythonAppium来自动化控制软件,是十分的简单与方便,可以想象一下自动刷网课,购物聊天,收能量等。

最后感谢Csdn等其他人的文章,如果侵犯,错误请联系作者处理,谢谢。
用心做好每一篇文章

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值