• Appium进行APP自动化测试


       之前用过uiautomator2对安卓App进行自动化测试,本次简单介绍Appium进行App自动化测试。

        Appium具体功能不再介绍,可自行百度。

    1、 安装Appium

        首先官网下载对应版本:

        Release v1.22.3-4 · appium/appium-desktop · GitHub

        注意:其他Node.js\JDK\Andoird SDK\Python\Selenium自行安装

    2、 元素识别

        元素识别可用Android自带的uiautomatorview,也可用第三方工具weditor,也可用appium的Inspector。随着Appium Desktop升级到1.22.0版本,服务和元素查看器已经分开了,查看元素信息就需要下载Appium Inspector。下载地址:Releases · appium/appium-inspector · GitHub

    2.1  首先运行Appium,配置相关信息

        

    2.2 启动appium inspector,配置相关信息

         2.3 点击 Start Session打开界面,可实时刷新。

    3、 编写代码实现

    1. import time
    2. import unittest
    3. from appium import webdriver
    4. from appium.webdriver.common.appiumby import AppiumBy as By
    5. class InspectTest(unittest.TestCase):
    6. caps = {}
    7. caps["platformName"] = "Android"
    8. caps["appium:platformVers"] = "12"
    9. caps["appium:deviceName"] = "7d9p45zhytuson6l"
    10. caps["appium:ensureWebviewsHavePages"] = True
    11. caps["appium:nativeWebScreenshot"] = True
    12. caps["appium:newCommandTimeout"] = 3600
    13. caps["appium:connectHardwareKeyboard"] = True
    14. caps["appium:appPackage"] = "com.xxxxx.xxxxx"
    15. caps["appium:appActivity"] = "crc64ad4cc14999bdba0b.MainActivity"
    16. # 当前Python为3.10,其find_element方法有所改变
    17. def start_app(self):
    18. d = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.caps)
    19. acc = d.find_element(By.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.EditText')
    20. acc.send_keys('username')
    21. time.sleep(1)
    22. pw = d.find_element(By.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.widget.EditText')
    23. pw.send_keys('password')
    24. time.sleep(1)
    25. loginBtn = d.find_element(by=By.CLASS_NAME, value='android.widget.Button')
    26. loginBtn.click()
    27. time.sleep(5)
    28. backB = d.find_element(By.CLASS_NAME, 'android.widget.Button')
    29. backB.click()
    30. time.sleep(1)
    31. report = d.find_element(By.ANDROID_UIAUTOMATOR, 'new UiSelector().text("Inspection Reports")')
    32. report.click()
    33. time.sleep(5)
    34. d.quit()
    35. def test01_starts(self):
    36. self.start_app()
    37. if __name__ == '__main__':
    38. unittest.main()

     

  • 相关阅读:
    C语言入门 Day_13 二维数组
    我做了一个 VSCode 插件版的 ChatGPT
    区块链论文速读A会-OSDI 2023 一种区块链的高效认证存储
    81 # 多语言
    嵌入式学习日记 27
    专注区块链底层技术突破,“复杂美”用技术开源推动产业未来
    如何进行字符串的分割和拼接?
    帅地这些年看过的书
    vue3介绍
    【JUC】Java并发编程从挖坑到入土全解(4-一文讲通LockSupport与线程中断->长图预警)
  • 原文地址:https://blog.csdn.net/zljun8210/article/details/126161512