如何在Appium中使用AI定位

news2024/11/24 4:37:21

当我们在写自动化测试脚本的时候,传统情况下一定要知道元素的属性,如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的话,必须要指为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秒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat安装及配置教程(IDEA整合Tomcat)

目录 友情提醒第一章、Tomcat下载与安装1.1)Tomcat介绍1.2)官网下载 第二章、Tomcat配置环境变量2.1)windows环境变量配置2.2)验证Tomcat配置是否成功2.3)报错解决 第三章、IDEA整合Tomcat3.1)打开IDEA开发…

11.Ceph 对象存储系统 RGW 接口

文章目录 Ceph 对象存储系统 RGW 接口概念逻辑单位创建RGW接口开启httphttps创建RadosGW账户S3接口访问测试 Ceph 对象存储系统 RGW 接口 概念 对象存储(object storage)是非结构数据的存储方法,对象存储中每一条数据都作为单独的对象存储&…

资深测试总结,自动化测试-JSON+YAML+CSV+Excel数据驱动(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 数据驱动 在自动…

三分钟为你揭晓什么软件可以音频转文字

在一个繁忙的国际会议上,艾丽莎是一位积极参与的会议记录员。她负责记录并整理与会者的发言内容,以便后续审阅和分析。然而,由于会议中使用英语进行交流,艾丽莎常常面对着大量的英文音频文件,需要将这些音频转换为文字…

C# 连接mysql数据库报错:Character set ‘utf8mb3‘ is not supported by .Net Framework.

最近项目突然连接mysql数据库出现一个bug,排查了半小时,最后更新MySql.Data版本解决了,错误信息如下: System.NotSupportedException: Character set utf8mb3 is not supported by .Net Framework.在 MySql.Data.MySqlClient.Cha…

C#List转IList方法

最近工作中使用到了C#的List和IList。 这里参考百度上的资料&#xff0c;总结一下。 IList使用命名空间&#xff1a; using System.Collections; List<T>类:表示可通过索引访问的对象的强类型列表&#xff0c;提供用于对列表进行搜索、排序和操作的方法。 IList<T&…

思维导图软件哪个好?试用百款导图软件只留下这15个

​思维导图软件哪个好&#xff1f; 这是许多第一次使用思维导图软件的朋友无法回避的问题&#xff0c;看着眼前有数百款思维导图软件&#xff0c;数量多到让人患上选择困难症&#xff0c;不知道要选哪个导图软件好&#xff0c;这就好比在繁星点点的夜空中寻找属于自己的那颗星&…

vue3实现上传功能

效果&#xff1a; 点击即可上传 代码&#xff1a; <a-form-item label"附件" name"logUrl" placeholder""><a-uploadv-model:file-list"filesLists":customRequest"uploadFile"class"upload-list-inline&quo…

基于PyQt5的UI界面开发——对基本控件的介绍

基本控件介绍 在PyQt中&#xff0c;控件是用户界面上的可见元素。控件可以包括按钮、标签、文本框、进度条等。每个控件都有自己的属性和方法&#xff0c;可以通过编程方式进行调整和操作。 以下是一些常用的PyQt控件&#xff1a; QLabel&#xff08;标签&#xff09;&#…

WebDAV之π-Disk派盘 + Keepass

KeePass是一款优秀的开源密码管理器,可以帮助用户安全、高效地管理自己的密码,而派盘则是一款本地个人云存储解决方案,可以帮助用户轻松地存储、管理和共享各种类型的文件。将这两个工具结合在一起,可以让用户更加安全和便捷地管理自己的密码。 π-Disk派盘 – 知识管理专…

k8s单机部署mysql

前面我们学习了k8s入门系列文章&#xff0c;了解了k8s的一些基础概念以及怎么使用。本篇文章将进行一个小小的实战&#xff0c;使用k8s来部署单机版的mysql数据库&#xff0c;基本涵盖到前面讲到的Namespace、Pod、Deployment、Service、PV、PVC、Secret等资源对象。 我们先画…

【力扣每日一题】2023.7.17 字符串相加

题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题面很简单,就是要将两个字符串看作是数字然后相加,将最后结果转为字符串返回即可. 看到这题我的第一反应是直接转成数字再相加再转成字符串,像是这样: class Solution { public:string addStrings(string num1, string…

无畏契约进不去,提示图形驱动程序崩溃怎么办?

无畏契约国内开服后&#xff0c;不少玩家表示&#xff0c;外服一点毛病没有&#xff0c;怎么在国服一下又是挂机违规&#xff0c;一下子又是图形驱动程序崩溃的警告呢&#xff1f;再说了&#xff0c;人有三急&#xff0c;逼不得已掉个线&#xff0c;再次连上就再也进不去了&…

Redis进阶底层原理 - 客户端集群方案

Redis集群一般来说会存在多个主节点&#xff0c;用于数据分区。对于客户端来说只会连接到某一个Redis主机节点。那客户端如果使用集群&#xff1f;方案如下&#xff1a; 原图地址&#xff1a;

reggie优化03-MySQL主从复制

1、介绍 2、配置 1、开启CentOS7克隆2台 2、用Navicat连接2个数据库 3、进入shell&#xff0c;配置主库 验证&#xff1a; 4、进入shell&#xff0c;配置从库 3、测试主从复制 在主库创建一个数据库&#xff0c;从库也会自动生成一个数据库&#xff08;表&#xff0…

接口测试和单元测试

接口测试的本质&#xff1a;就是通过数据驱动&#xff0c;测试类里面的函数。单元测试的本质&#xff1a;通过代码级别&#xff0c;测试函数。单元测试的框架&#xff1a;unitest接口&#xff0c;pytestWEB----->接口&#xff0c;pytestjenkinsallure。 requests 模块讲解和…

机器学习实战9-基于多模型的自闭症的筛查与预测分析

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战9-基于多模型的自闭症的筛查与预测分析&#xff0c;自闭症是一种神经发育障碍&#xff0c;主要表现为人际交往和社交互动的困难、沟通障碍以及重复刻板行为。早期的筛查和分析对于儿童自闭症的诊断和干…

你知道Apache 软件基金会如何选择开源项目吗

Apache软件基金会&#xff08;Apache Software Foundation&#xff0c;简称ASF&#xff09;是一个致力于开源软件发展的慈善组织&#xff0c;因其广泛的项目和开放的治理模式而备受社区赞誉。作为全球最大的开源基金会之一&#xff0c;ASF如何选择开源项目成为人们关注的焦点。…

Spring方式发送邮箱

1.导入依赖 <!--邮件发送依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency> 2.导入工具类 package com.example.demo.demo;import org.springfram…

LED驱动(总线设备架构)——STM32MP157

文章目录 概述总线设备驱动总线设备驱动模型程序步骤&#xff1a;常用函数注册/ 反注册获得资源 LED 模板驱动程序的改造&#xff1a;总线设备驱动模型board_A_led.cchip_demo_gpio.cled_opr.hled_resource.hleddrv.cleddrv.hledtest.cMakefile编译测试 概述 为什么要引入总线设…