安卓python3.6_【Mac + Appium + Python3.6学习(二)】之Android自动化测试,appium-desktop配置和简易自动化测试脚本...

配置环境:

Appium version :1.9.1

Appium-desktop:后改为1.7.1

Android:6.0.1

Mac:10.13.6

一、appium-desktop配置连接Android真机

1、开启appium服务

0a97eab08150af4bdbc41a12dfa9154b.png

如果报错:参考上一篇解决办法(第二节第6小点)

2、配置连接真机的参数

45f8682af7e1bc8244fc6bb267c3e25e.png

其中,appPackage、appActivity如何获取呢(有坑):

输入如下:

$ adb shell

shell@R9s:/ $ dumpsys activity | grep mFocusedActivity

mFocusedActivity: ActivityRecord{f8dacd9 u0 cn.sqm.citymine_safety/.LoginActivity(这块有问题,见下面) t64}

其中:cn.sqm.citymine_safety/.LoginActivity是我们需要的

可以点击【Save As】进行保存

876545955084c97e04ccc02130ee4139.png

然后点击【Start Session】按钮。

但是报错:An unknown server-side error occurred while processing the command. Original error: Error occured while starting App. Original error: Permission to start activity denied.

经查询得知是:appActivity这块的问题

解决如下,命令行输入:

adb shell dumpsys activity activities >/Users/xxx/Desktop/activity.txt

打开文档,如下:

057fa477da155fd7eb98a6bcd539c2bb.png

3、检查器

修改后再一次运行,会打开The Inspector:

检查器是应用程序状态的可视化表示具有在应用程序中执行某些交互的能力Appium。

9a9577eaad04493db5c356c4fe2b5c3f.png

4、解决每次启动时都安装setting和unlock app方法

但是有一个问题是,以后每次启动都要安装setting和unlock app,为了解决,如下:

==========================================================

下面两个因为不是在appium-desktop下修改的,所以对本文不适。

==========================================================

1)首先修改...lib/android-helpers.js文件

从网上找了很多修改的方法但是统一都在appium下的android-helpers.js修改,屡试不爽,经过查询得知应该在appium-desktop下修改,可能是因为我用的是这个软件吧:

它的路径为:

# 修改android-helpers.js

open

/Applications/Project/Appium1.7.1.app/Contents/Resources/app/node_modules/appium/node_modules/appium-android-driver/lib

打开android-helpers.js文件

43ab2c6c51b14a4020b276b3fb87983a.png

①搜索下面代码后注释掉:328行

await adb.install(unicodeIMEPath, false);

如图:

aca09c3ede7576bced230c3f18307f60.png

②接着注释掉下面两行代码:469、472行

await helpers.pushSettingsApp(adb);

await helpers.pushUnlock(adb);

61b4b0df9a2babd1f8d9a7ac41351c11.png

这个文件就算改完了,保存并退出。

2)其次修改.../build/lib/android-helpers.js文件

# 修改android-helpers.js

open /Applications/Project/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-android-driver/build/lib/

702206620f5d9566c523535ed94e4e36.png

①注释掉代码并在下一行添加一行代码:892、893行

// return _regeneratorRuntime.awrap(adb.install(_appiumAndroidIme.path, false));

return context$1$0.abrupt('return',defaultIME);

41747698c724f6357b42052d67183ee0.png

②接着注释下面并添加一行:1287、1288行;1297、1298行

// return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb));

return context$1$0.abrupt('return',defaultIME);

// return _regeneratorRuntime.awrap(helpers.pushUnlock(adb));

return context$1$0.abrupt('return',defaultIME);

0fe69e87e4fdabcdf649e513620fc949.png

ok,保存并且退出。重启appium-desktop即可。不会再无休止地让你安装Unlock和AppiumSetting了。

二、 Android自动化py脚本编写

写一下简易的代码如下:

desired_capabilities.py

48304ba5e6f9fe08f3fa1abda7d326ab.png

def get_desired_capabilities():

desired_caps = {

"platformName": "Android",

"platformVersion": "6.0.1",

"deviceName": "OPPO",

"appPackage": "cn.sqm.citymine_safety",

"appActivity": ".activity.LauncherActivity",

"udid": "608ad0fe"

}

return desired_caps

def get_uri():

return 'http://localhost:4723/wd/hub'

48304ba5e6f9fe08f3fa1abda7d326ab.png

test.py

48304ba5e6f9fe08f3fa1abda7d326ab.png

from appium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

import unittest

import time

from time import sleep

import Mine.Appium.desired_capabilities as desired_capabilities

from selenium.webdriver.common.by import By

class AndroidTest(unittest.TestCase):

@classmethod

def setUpClass(self):

desired_cap = desired_capabilities.get_desired_capabilities()

uri = desired_capabilities.get_uri()

self.d = webdriver.Remote(uri,desired_cap)

@classmethod

def tearDownClass(self):

sleep(10)

self.driver.quit()

pass

def setUp(self):

print("=======start!=======")

sleep(5)

size = self.d.get_window_size()

print(size)

# 输入用户名

userName = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/et_login_id")

userName.send_keys("xxx")

# 输入密码

password = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/et_login_password")

password.send_keys("xxx")

# 登录密码

button = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/btn_login")

button.click()

def tearDown(self):

print("=======stop!=======")

def test1(self):

print("测试开始!")

# 发起任务

self.d.find_element_by_id("cn.sqm.citymine_safety:id/rl_add_task").click()

# 任务类型

self.d.find_element_by_id("cn.sqm.citymine_safety:id/tv_select_task_type").click()

self.d.swipe(534, 1630, 534, 1583, 500)

# 向上拖动

self.d.swipe(500, 1270, 500, 500, 500)

# 获取值

text = self.d.find_element_by_id("cn.sqm.citymine_safety:id/tv_get_location").text

self.assertEqual(text,"公园1","定位不对!")

if __name__=='__main__':

unittest.main()

48304ba5e6f9fe08f3fa1abda7d326ab.png

但是报错:

selenium.common.exceptions.WebDriverException: Message: Parameters were incorrect. We wanted {"required":["value"]} and you sent ["text","value","id","sessionId"]

解决参考如下:

找到原因是selenium版本的问题,把selenium版本降到3.0.1 就可以了,执行命令如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 查看命令:

pip show selenium //查看当前包的版本信息

# 卸载命令:

pip uninstall selenium //卸载当前安装的包

# 安装命令:

pip install selenium==3.0.1 //指定版本号安装

# 查看命令:

pip show selenium //查看当前包的版本信息

48304ba5e6f9fe08f3fa1abda7d326ab.png

但是再一次执行appium程序时又遇到如下报错:

ImportError: cannot import name 'InvalidArgumentException'

在此路径下的exceptions.py文件中添加一段代码:

/Users/xxx/.pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/common/exceptions.py

class InvalidArgumentException(WebDriverException):

"""

"""

pass

再一次运行appium程序,自动化运行成功!!!!

0ebbdcb5a8e51bc75450722398d6d8ab.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值