从0到1详细讲解代码:使用appium实现APP UI自动化(python实现)

使用appium实现APP UI自动化

自动化实现app登录的代码解释:

代码1:

root_path = os.path.dirname(__file__)   

打印当前项目路径

app_path = os.path.join(root_path,"app/").replace("\\","/")

打印app安装包的路径

代码的意思
os.path.dirname(file)返回脚本的路径,但是需要注意一下几点:
1、必须是实际存在的.py文件,如果在命令行执行,则会引发异常NameError: name ‘file’ is not defined
2、在运行的时候如果输入完整的执行的路径,则返回.py文件的全路径如:
python c:/test/test.py 则返回路径 c:/test ,如果是python test.py 则返回空
3、结合os.path.abspath用,效果会好,如果大家看过一些python架构的代码的话,会发现经常有这样的组合
os.path.dirname(os.path.abspath(file)),os.path.abspath(file)返回的是.py文件的绝对路径
这就是os.path.dirname(file)的用法,其主要总结起来有:
1、不要以命令行的形式来进行os.path.dirname(file)这种形式来使用这个函数
2、结合os.path.abspath()使用

root_path = os.path.dirname(__file__)
app_path = os.path.join(root_path,"app/").replace("\\","/")
app_name ="osc.apk"
desired_caps['app'] = '%s%s'%(app_path,app_name)

上述代码的意思是找到“osc.apk”文件的路径;如果把“osc.apk”文件放在代码的同级下面,就不用如此复杂,可以直接:
**desired_caps[‘app’] = “osc.apk” ** #如果app与代码在同一路径下,则可以直接这么写。。。。

注:一般写框架需要有代码结构,将apk文件放在app目录中,这样可以使代码结构更加清晰,不至于太乱。

代码2:包名 和 主activity获取

desired_caps['appPackage'] = 'net.oschina.app' #包名
desired_caps['appActivity']='net.oschina.app.LaunchActivity'   #主activity

提取包名和主activity的方法:
方法1:
**cmd:java –jar re-sign.jar **
#打开re-sign.jar 或者直接双击re-sign.jar
将osc.apk移动到re-sign.jar中,点击“保存”后可获得包名和主activity名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这个工具容易报错,错误原因:JAVA_HOME 路径写错了。

方法2:
使用命令:
aapt dump badging E:\osc.apk
在这里插入图片描述
在这里插入图片描述
方法3:
Appium中在“Android Settings”里, “application path”点击“choose”选择osc.apk的路径——取package和Launch Activity的名
(一般第一个就是主activity;不一定就是第一个,看情况)——用完之后必须去掉勾选,不然appium会报错(因为在代码中已经传过这些参数,appium中再设置会重复,尽量不要用appium设置)
在这里插入图片描述

代码3:运行的脚本

1、连接到对应的server
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

问题:http://localhost:4723/wd/hub怎么来的???
--------Appium中查看port值为4723;

2、定位元素

driver.find_element_by_name(“我的”).click()

代码4:点击登录页面

driver.find_element_by_id("net.oschina.app:id/iv_portrait").click()

问题:net.oschina.app:id/iv_portrait的来源?—— 使用工具UI Automator Viewer
工具:UI Automator Viewer—— 一个用来来扫描和分析Android应用程序的UI组件的GUI工具
用途:使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性
第一步:Cmd中输入:uiautomatorviewer——打开UI Automator Viewer
第二步:通过uiautomatorviewer窗体点击 “Device screenshot” ——一个计算机应用的打开窗口将显示出来
第三步:下面将来查看按钮“登录”的ID:点击 “登录” (如下截图) ,查看右边的panel来找到 “resource-id” 的值

注意:appium中:General Settings —勾选—Override Existing Session

#防止出现报错信息:
selenium.common.exceptions.NoSuchElementException:Message:An element could not be located on the page using the given search parameters.

完整代码

#!encoding=utf-8
import os
import time
from appium import webdriver

root_path = os.path.dirname(__file__)
app_path = os.path.join(root_path,"app/").replace("\\","/")
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.2'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['app'] = app_path+os.listdir(app_path)[0]
desired_caps['appPackage'] = 'net.oschina.app'
desired_caps['appActivity'] = 'net.oschina.app.LaunchActivity'
desired_caps["unicodeKeyboard"] = True  # 使用unicodeKeyboard的编码方式来发送字符串
desired_caps["resetKeyboard"] = True  # 将键盘给隐藏起来
#desired_caps['appActivity'] = 'net.oschina.app.improve.account.activity.LoginActivity'

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)
time.sleep(3)

# driver.find_elements_by_id("net.oschina.app:id/btn_update").click()
# time.sleep(10)

print driver.page_source

print driver.find_elements_by_id("net.oschina.app:id/nav_tv_title")
for i in driver.find_elements_by_id("net.oschina.app:id/nav_tv_title"):
    # print i.get_attribute("name")
    print i.text
driver.find_elements_by_id("net.oschina.app:id/nav_tv_title")[3].click()
driver.find_element_by_xpath("//android.widget.ImageView[@resource-id=\"net.oschina.app:id/iv_portrait\"]")
driver.find_element_by_id().send_keys(u"你好")
# driver.find_element_by_name("我的").click()
# time.sleep(1)
# driver.find_element_by_id("net.oschina.app:id/iv_portrait").click()
# time.sleep(1)
# print driver.current_activity
time.sleep(1)
driver.quit()

备注:大家有疑问可以评论区留言,不吝赐教~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值