• 如何在Appium中使用AI定位


    当我们在写自动化测试脚本的时候,传统情况下一定要知道元素的属性,如id、name、class等。那么通过AI的方式定位元素可能就不需要知道元素的属性,评价人对元素的判断来定位,比如,看到一个搜索框,直接使用ai:search来定位, 或者我想定位一个关闭按钮,之直接使用 ai:close,我们并不需要知道这搜索框和关闭按钮的属性。

    appium 通过插件的方式可以支持AI定位。为体验一个这种定位方式我花了两周时间。

    ### 系统要求

    首先,需要一些系统依赖项来处理图像。

    macOS

    brew install pkg-config cairo pango libpng jpeg giflib
    
    • Linux
    sudo apt-get install pkg-config libcairo2-dev libpango* libpng-dev libjpeg-dev giflib*
    
    • Windows

    暂不支持。

    如果遇到问题,您可能必须单独安装每个包。

    我一开始在Windows试了半天不成功,因为我有现成的appium环境,后来发现压根不支持,于是,换成了macOS, 所以后面的操作在macOS下完成,当然,如果你有Linux环境,我觉得也是OK的。

    ### 安装 Android Studio

    因为我要操作的移动设备是Android, 所以需要安装Android SDK, 那么Android Studio集成了Android SDK。

    下载android studio: https://developer.android.com/studio

    在安装Android Studio的过程中需要设置android SDK的路径,我的路径为:

    /Users/tech/Library/Android/sdk
    

    然后,需要配置环境变量:sudo vi ~/.bash_profile

    1. ANDROID_HOME=/Users/tech/Library/Android/sdk
    2. PATH=${PATH}:${ANDROID_HOME}/platform-tools
    3. PATH=${PATH}:${ANDROID_HOME}/tools

    最后,使配置生效:source ~/.bash_profile


    ### 安装appium

    1、不要使用appium-desktop, 通过命令方式安装appium。

    1. > brew install node # get node.js
    2. > npm install -g appium # get appium

    2、安装appium-doctor

    > npm install appium-doctor
    

    3、通过appium-doctor命令检查环境:

    1. > appium-doctor
    2. info AppiumDoctor Appium Doctor v.1.11.0
    3. info AppiumDoctor ### Diagnostic for necessary dependencies starting ###
    4. info AppiumDoctor ✔ The Node.js binary was found at: /usr/local/bin/node
    5. info AppiumDoctor ✔ Node version is 10.15.1
    6. WARN AppiumDoctor ✖ Xcode is NOT installed!
    7. info AppiumDoctor ✔ Xcode Command Line Tools are installed in: /Library/Developer/CommandLineTools
    8. info AppiumDoctor ✔ DevToolsSecurity is enabled.
    9. info AppiumDoctor ✔ The Authorization DB is set up properly.
    10. WARN AppiumDoctor ✖ Carthage was NOT found!
    11. info AppiumDoctor ✔ HOME is set to: /Users/tech
    12. info AppiumDoctor ✔ ANDROID_HOME is set to: /Users/tech/Library/Android/sdk
    13. info AppiumDoctor ✔ JAVA_HOME is set to: /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    14. info AppiumDoctor ✔ adb exists at: /Users/tech/Library/Android/sdk/platform-tools/adb
    15. info AppiumDoctor ✔ android exists at: /Users/tech/Library/Android/sdk/tools/android
    16. info AppiumDoctor ✔ emulator exists at: /Users/tech/Library/Android/sdk/tools/emulator
    17. info AppiumDoctor ✔ Bin directory of $JAVA_HOME is set
    18. ...

    ### appium AI 插件

    GtiHub地址:https://github.com/testdotai/appium-classifier-plugin

    使用Appium 1.9.2-beta版以上。另外,一定要使用 XCUITest 驱动程序(用于iOS)或UiAutomator2或Espresso驱动程序(用于Android)。较老的iOS和Android驱动程序不支持所需的Appium在任何情况下,都不推荐使用。


    ### Classifier 设置

    要使这个插件对Appium可用,只需转到主appium项目的安装目录下面,并运行:

    1. > cd /usr/local/lib/node_modules/appium
    2. > npm install test-ai-classifier

    将这个插件安装到Appium的依赖树中,并使其可用。

    我在安装这个插件的时候各种报错,你可以试试下面的命令。

    > sudo npm --registry http://registry.npm.taobao.org install test-ai-classifier  --unsafe-perm
    

    ### 使用

    1、通过命令的方式启动appium

    1. > appium
    2. [Appium] Welcome to Appium v1.14.0
    3. [Appium] Appium REST http interface listener started on 0.0.0.0:4723
    4. ...

    2、编写自动化测试脚本:

    1. from appium import webdriver
    2. from time import sleep
    3. CAPS = {
    4. "deviceName": " MEIZU_E3",
    5. "automationName": "UiAutomator2",
    6. "platformName": "Android",
    7. "platformVersion": "7.1.1",
    8. "appPackage": " com.meizu.flyme.flymebbs",
    9. "appActivity": ".ui.LoadingActivity",
    10. "noReset": True,
    11. "unicodeKeyboard": True,
    12. "resetKeyboard": True,
    13. "customFindModules": {"ai": "test-ai-classifier"},
    14. "testaiConfidenceThreshold": 0.1,
    15. "shouldUseCompactResponses": False,
    16. }
    17. driver = webdriver.Remote('http://localhost:4723/wd/hub', CAPS)
    18. sleep(3)
    19. # 用 AI 定位到搜索框
    20. driver.find_element_by_custom("ai:search").click()
    21. sleep(5)
    22. driver.find_element_by_id("com.meizu.flyme.flymebbs:id/kf").send_keys("flyme")
    23. driver.find_element_by_id("com.meizu.flyme.flymebbs:id/o7").click()
    24. result = driver.find_elements_by_id("com.meizu.flyme.flymebbs:id/a2a")[0].text
    25. print(result)
    26. driver.quit()

    automationName
    如果要测试的是Android的话,必须要指为UiAutomator2或 Espresso。

    customFindModules
    必须要指定为 {"ai": "test-ai-classifier"}。

    testaiConfidenceThreshold
    此功能决定了考虑元素的最低置信度。默认情况下,值为0.2。参数介于0和1之间的数字,其中1表示信心必须完美,0表示根本不需要信任。

    shouldUseCompactResponses
    这指示appium在找到元素时包含有关元素的额外信息,这大大加快了获取此插件的输入过程。

    最终,我要体验的代码就是这一行:

    driver.find_element_by_custom("ai:search").click()
    

    通过ai来定位搜索框

    确实定位到了,可是定位的速度特别慢,大概需要10~20秒。

    最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

  • 相关阅读:
    SRT参数说明
    【Luogu P2221】[HAOI2012] 高速公路(线段树,期望)
    java-net-php-python-jsp学生社团信息演示录像2019计算机毕业设计程序
    LeetCode 209. 长度最小的子数组
    01-Python的基本概念
    R语言:读取loom文件,以及loom文件转成Seurat对象
    2342. 数位和相等数对的最大和
    Netty NIO ByteBuffer 简单实验
    nginx(六十五)proxy模块(六)处理上游的响应头部
    【ScrollView】Android ScrollView无法滚动到底部
  • 原文地址:https://blog.csdn.net/YJT1002/article/details/134092174