如何在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

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

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

安装appium

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

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

2、安装appium-doctor

> npm install appium-doctor

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

> appium-doctor
info AppiumDoctor Appium Doctor v.1.11.0
info AppiumDoctor ### Diagnostic for necessary dependencies starting ###
info AppiumDoctor  ? The Node.js binary was found at: /usr/local/bin/node
info AppiumDoctor  ? Node version is 10.15.1
WARN AppiumDoctor  ? Xcode is NOT installed!
info AppiumDoctor  ? Xcode Command Line Tools are installed in: /Library/Developer/CommandLineTools
info AppiumDoctor  ? DevToolsSecurity is enabled.
info AppiumDoctor  ? The Authorization DB is set up properly.
WARN AppiumDoctor  ? Carthage was NOT found!
info AppiumDoctor  ? HOME is set to: /Users/tech
info AppiumDoctor  ? ANDROID_HOME is set to: /Users/tech/Library/Android/sdk
info AppiumDoctor  ? JAVA_HOME is set to: /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
info AppiumDoctor  ? adb exists at: /Users/tech/Library/Android/sdk/platform-tools/adb
info AppiumDoctor  ? android exists at: /Users/tech/Library/Android/sdk/tools/android
info AppiumDoctor  ? emulator exists at: /Users/tech/Library/Android/sdk/tools/emulator
info AppiumDoctor  ? Bin directory of $JAVA_HOME is set
...

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项目的安装目录下面,并运行:

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

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

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

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

使用

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

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

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

from appium import webdriver
from time import sleep

CAPS = {
    "deviceName": " MEIZU_E3",
    "automationName": "UiAutomator2",
    "platformName": "Android",
    "platformVersion": "7.1.1",
    "appPackage": " com.meizu.flyme.flymebbs",
    "appActivity": ".ui.LoadingActivity",
    "noReset": True,
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    "customFindModules": {"ai": "test-ai-classifier"},
    "testaiConfidenceThreshold": 0.1,
    "shouldUseCompactResponses": False,
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', CAPS)
sleep(3)

# 用 AI 定位到搜索框
driver.find_element_by_custom("ai:search").click()
sleep(5)
driver.find_element_by_id("com.meizu.flyme.flymebbs:id/kf").send_keys("flyme")

driver.find_element_by_id("com.meizu.flyme.flymebbs:id/o7").click()
result = driver.find_elements_by_id("com.meizu.flyme.flymebbs:id/a2a")[0].text
print(result)

driver.quit()
  • automationName
    如果要测试的是Android的话,必须要指为UiAutomator2Espresso
  • 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秒。

如果,你想知道 appium-classifier-plugin支持那些类型的元素定位,看这里:https://github.com/testdotai/appium-classifier-plugin/blob/master/lib/labels.js

目前支持100多种类型。

原文地址:https://www.cnblogs.com/fnng/p/11241644.html

时间: 2024-10-10 22:37:04

如何在Appium中使用AI定位的相关文章

Appium中app的元素定位

app定位方式,本文只讲Android手机的定位方式. 前提条件是adb连接到模拟器或者是手机(具体连接方式这里不再讲解),证明已连接到设备 adb devices app元素定位工具一:UI Automator Viewer 这个工具是Android SDK自带的一个定位工具,具体页面截图如下: app元素定位工具二:Appium工具 启动Appium,启动之后,页面有一个放大镜的按钮,如图所示: 点击放大镜按钮,进入配置项,如果所示: platformName  -- 系统名称 platfo

如何在ChemScript中创建脚本文件

ChemScript是一个化学信息学软件开发工具包(SDK),它包含的编程算法在珀金埃尔默产品中较为常见.本文将讲解如何在ChemBioOffice中的ChemScript申请创建自己的脚本文件. ChemScript的所有脚本文件范例都可以在Python和C#/.NET中获取.如果你熟悉这些语言,你会发现这些脚本很容易理解.但是如果你刚刚接触C#/.NET或Python,我们建议你参考相关的网站和书籍.ChemScript在Python和C#/.NET都可用,而在本教程中我们将使用Python

详细介绍如何在Eclipse中使用SVN

作为一名程序员,svn是比较常用也必然会使用到的一个工具,它的全拼为Subversion,是一个开源的版本控制系统,可以对每次修改的文件和目录进行准确记录,以便在使用的时候及时提取.本文主要介绍如何在Eclipse中使用svn. 1.打开eclipse,在Help菜单中找到marketPlace,点击进入. 2.在搜索框Find中输入subclipse,点击右边的Go按钮查询:subclipse找到之后,点击右下角的按钮install安装. 3.选择需要安装的一些文件,默认全选即可,点击Next

如何在Ruby中编写微服务?

[编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采用微服务架构.但是,又有多少相关教程呢?我们来看看这篇关于用Ruby编写微服务的文章吧. 人人都在讨论微服务,但我至今也没见过几篇有关用Ruby编写微服务的.像样的教程.这可能是因为许多Ruby开发人员仍然最喜欢Rails架构(这没什么不好,Rails本身也没什么不好,但是Ruby可以做到的事还有很

初探UiAutomator2.0中使用Xpath定位元素

J 今天的主题是讲一下在使用过程中遇到的一个问题,如何在UiAutomator2.0中使用Xpath定位元素? 背景 现在的app在打包成apk的时候都是有加固处理的,各种混淆加固,所以已经破坏了或扰乱了原本的代码变量命名形式,这就给我们要基于界面来做自动化测试带来了灾难性的阻碍,因为那些混淆过的id是不固定的,下一次再出个新版本,这一切都变了,所以这就没办法用id来定位混淆过的app元素,那还有什么好的方法吗?还记得Web自动化测试中神乎其技的xpath吗?不管什么元素都可以用它定位出来,所以

appium+真机+环境搭建+获取package和activity来验证是否搭建成功+appium自带的定位元素

提醒:安装好的环境不能随意改动配置和环境变量,如果改动需要重新启动appium server服务,要不然代码会一直报错,没有配置adb环境变量 首先,我们需要搭建环境,要准备以下安装包和一部手机: 所有需要的包给大家一个链接地址可供下载: 链接: https://pan.baidu.com/s/16daXwktbGGYf3a6EaB9B1Q 提取码: uakz 第一步:安装JDK 解压上面的jdk包,安装到需要的地方 配置环境变量: 验证是否安装和配置成功: cmd中输入java -versio

Appium(十):元素定位(加强版)

1. 元素定位 写完上一篇元素定位的博客,发现实用性基本为零.这几天真的烦死我了,一直在找资料,还去看了一遍appium官网文档.最后结合着selenium的定位方法,测试出几种可行的元素定位方法. 1.1 层级定位 什么是层级定位呢? 在很多的自动化中如果只是靠简单的定位是没有办法完成自动化的.有的元素的id.name.className都是一样的,xpath定位效率低下,并且在appium中,可以使用的属性非常少,这个时候我们就需要使用层级定位了. 我们可以看到,QQ天气和微视的class都

如何在makfile中查看变量的值

在makefile中查看变量的取值是多少应该是一个比较麻烦的问题,但是本大神自己研究出一个十分方便的方法.这个方法十分简单.现在介绍如下 如果在一个十分复杂庞大的makefile文件中,有个地方用到一个变量SRC_FILE,你很想知道makefile运行到此处的时候这个变量的值为多少.那么你可以在这个变量的下面写两行东东: $(shell echo $(SRC_FILE) > readme.txt ) rrrrrrrrrrrrrrrrrrr 第一行其实是调用shell命令来将这个变量的值输入到r

如何在Angular2-cli中使用插件(不使用配置)

重要点: 要把插件放在src/assets文件中 如何在angular-cli中使用jquery插件 a.在index.html中引入 <script  src="./assets/jquery-1.8.3.min.js"></script> b. 在要使用jquery的组件中声明(XX.component.ts) declare var $ : any; c.导入onInit import { OnInit} from '@angular/core'; d.输