• 【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服务

    如果报错:参考上一篇解决办法(第二节第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程序,自动化运行成功!!!! 

    转自:https://www.cnblogs.com/Owen-ET/p/9945164.html

  • 相关阅读:
    解方程
    十进制快速幂
    comb
    题单解题记录-POJ题目分类推荐 (很好很有层次感)
    算法题离谱错误合集
    VMware-Ubuntu16.04踩坑解决记录
    2020牛客多校赛第三场
    需学习的博客地址
    错误记录
    可持久化线段树 区间第k大/小
  • 原文地址:https://www.cnblogs.com/dreamhighqiu/p/10989970.html
Copyright © 2020-2023  润新知