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

上一篇文章介绍安装appium测试环境,这一片研究介绍如何测试Android自动化。

上一篇地址:《【Mac + Appium学习(一)】之安装Appium环境

 这一篇参考:《Mac 下 appium 自动化测试 Android 测试配置和脚本编写(四)

配置环境:

  • Appium version :1.9.1
  • Appium-desktop:后改为1.7.1
  • Android:6.0.1
  • Mac:10.13.6

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

1、开启appium服务

 

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

2、配置连接真机的参数

 参数配置如下: 参考《Mac 下 appium 自动化测试 Android 测试配置和脚本编写(四)

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

参考:《获取app的 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】进行保存

 

然后点击【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这块的问题

Error occured while starting App. Original error: Permission to start activity denied.错误的解决方法

解决如下,命令行输入:

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

打开文档,如下:

 

3、检查器

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

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

 

 

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

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

关掉appium setting 和unlock自动安装的方法*

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

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

 

①《MacBook Appium 禁止每次运行都会启动appium setting 、appium unlock

 

②《appium解决每次运行都需要安装Unlock以及AppiumSetting的问题

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

 

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文件

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

await adb.install(unicodeIMEPath, false);

如图:

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

await helpers.pushSettingsApp(adb);

await helpers.pushUnlock(adb); 

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

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/

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

// return _regeneratorRuntime.awrap(adb.install(_appiumAndroidIme.path, false));
return context$1$0.abrupt('return',defaultIME);

 ②接着注释下面并添加一行: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);

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

二、 Android自动化py脚本编写

写一下简易的代码如下:

desired_capabilities.py

复制代码
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'
复制代码

test.py

复制代码
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()
复制代码

 

但是报错:

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

解决参考如下:

appium+webdriveragent+Python+真机/模拟器 app自动化测试

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

复制代码
# 查看命令:
pip show selenium //查看当前包的版本信息

# 卸载命令:
pip uninstall selenium //卸载当前安装的包

# 安装命令:
pip install selenium==3.0.1 //指定版本号安装

# 查看命令:
pip show selenium //查看当前包的版本信息
复制代码

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

ImportError: cannot import name 'InvalidArgumentException'

参考解决如下:《执行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程序,自动化运行成功!!!! 

 

posted @   Owen_ET  阅读(2034)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 模様 (TV size ver.) Ivy to Fraudulent Game
  3. 3 河口恭吾
  4. 4 愛してる 高鈴
  5. 5 一生所爱 卢冠廷,莫文蔚
  6. 6 世间美好与你环环相扣 柏松
  7. 7 理想三旬 陈鸿宇
  8. 8 不浪漫罪名 王杰
  9. 9 樱花树下 张敬轩
  10. 10 因为你在 达闻西乐队,福禄寿FloruitShow
  11. 11 悬溺 葛东琪
因为你在 - 达闻西乐队,福禄寿FloruitShow
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

因为你在 - 达闻西乐队/福禄寿FloruitShow

词:猴子

曲:猴子

制作人:吴涛

编曲:达闻西乐队/福禄寿FloruitShow

主唱:合成器

合声:猴子/福禄寿FloruitShow

吉他:猴子/老黑

贝斯:大鹏

鼓:小盛

缩混/母带:吴涛

录音棚:每个人自己家

曾有一瞬间

恐惧环绕身边

因为有你在

让我更勇敢

曾有一瞬间

泪水擦过我的脸

你飞奔而来

触摸我指尖

这个冬天

使命在召唤

时间停滞

期待的双眼

回头的瞬间

为什么感觉

其实我不孤单

原来是 你啊

还有你啊

背负着一样的痛

大家一起啊

快一起啊

拥抱着同样的梦

绝不能轻易说放弃

因为你在

因为你在

所有的爱

凝聚成力量

所有的语言

连接着心跳

直到明天

和你一起分享

胜利的喜悦

我才能心安

每当我醒来

空气清新温暖

谁起的灯火

谁打开的窗

每当我转身

耀眼的光芒

是谁点燃希望

原来是 你啊

还有你啊

背负着一样的痛

大家一起啊

快一起啊

拥抱着同样的梦

我想和你啊

想和你啊

手牵着手一起出发

我要和你啊

要和你啊

手牵着手一起回家

因为有你在

因为有你在

黑夜不再寒冷

我变的更勇敢

因为有你在

因为有你在

爱凝聚成希望

传递给我力量

因为有你在

因为有你在

黑夜不再寒冷

我变的更勇敢

因为有你在

因为有你在

爱凝聚成希望

传递给我力量

因为有你在

因为有你在

黑夜不再寒冷

我变的更勇敢

因为有你在

因为有你在

爱凝聚成希望

传递给我力量

爱永远不会消失

因为你在

因为你在

点击右上角即可分享
微信分享提示