『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略

『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略

  • 1 Appium-Inspector简介
  • 2 Appium Desktop中的Appium-Inspector
  • 3 安装Appium-Inspector
  • 4 Appium-Inspector网页版
  • 5 Appium-Inspector界面说明
    • 5.1 Appium Server配置
    • 5.2 Select Cloud Providers
    • 5.3 Advanced Settings
    • 5.4 Desired Capabilities配置
    • 5.5 Saved Capability Sets
    • 5.6 Attach to Session
  • 6 Start Session
  • 7 Inspector界面图标说明:
  • 8 App Source
  • 9 Selected Element
  • 10 Session Information

1 Appium-Inspector简介

  • Appium-InspectorAppium Desktop中自带的一个查看元素的工具;
  • 打开这个工具的前提下appium的服务是启动了;
  • 另外需要注意的是Appium最新安装方法是使用npm安装的,而不是Appium GUI方式安装,那么这里目前是没有Appium Desktop,也就没有Appium-Inspector工具了;
  • 所以需要单独安装Appium-Inspector

2 Appium Desktop中的Appium-Inspector

  • 如果是使用的Appium GUI方式安装的appium,那么就有Appium Desktop
  • Appium Desktop安装完成之后,双击打开:
    在这里插入图片描述
  • 点击 Start Server 按钮,启动 Appium server,并开启监听本机 4723 端口;
    在这里插入图片描述
  • 并且通过如下两种方式启动Appium Inspector
    在这里插入图片描述
  • 这种方式只有在旧版本的appium才有,但是我们用的最新版本的,需要单独安装了。

3 安装Appium-Inspector

  • 安装地址为:Appium-Inspector;
    在这里插入图片描述
  • 选择对应系统的版本即可,我的是windows版本:
    在这里插入图片描述
  • 下载后双击Appium-Inspector-windows-2023.11.1.exe安装即可,安装完如下:
    在这里插入图片描述

4 Appium-Inspector网页版

  • 如果不想安装,那可以直接使用Appium-Inspector网页版;
    在这里插入图片描述

5 Appium-Inspector界面说明

5.1 Appium Server配置

  • Appium Server主要是对IP、端口和地址进行设置,其中地址默认配置/wd/hub即可;
  • 参数如下:
Remote Host:127.0.0.1
Remote Port:4723
Remote Path:/wd/hub # 注意如果报错,请把/wd/hub改为/

在这里插入图片描述

5.2 Select Cloud Providers

  • 点击Select Cloud Providers则会出现云服务商的选择界面;

在这里插入图片描述

  • 选择一个后会出现该服务商的标签:
    在这里插入图片描述
  • 这些云服务都是国外的,基本用不上,一般只连本地的server即可。

5.3 Advanced Settings

  • Advanced Settings为高级配置;
    在这里插入图片描述

  • 一般是设置代理的可不用,其中:

Allow Unauthorized Certificates:允许未经授权的证书
Use Proxy:使用代理服务器

5.4 Desired Capabilities配置

  • Desired Capabilities配置这个和之前使用脚本启动道理是一样的;
  • 一些配置参数如下:
capabilities = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='emulator-5554',
    appPackage='com.tencent.mobileqqi',
    appActivity='com.tencent.mobileqq.activity.SplashActivity',
    language='en',
    locale='US'
)
  • 直接在对应的输入框中输入以上内容即可:
    在这里插入图片描述

5.5 Saved Capability Sets

  • 可以对已经配置好的进行保存操作:
    在这里插入图片描述
  • 保存后下次启动直接就可以用这个配置了:
    在这里插入图片描述

5.6 Attach to Session

  • 如果Appium已经连接手机的session了,那么直接选择Session ID,加入就行了,不需要在进行配置了:
    在这里插入图片描述

6 Start Session

  • 前边所有的配置做好好,直接点击界面中的Start Session,即可进入如下界面:
    在这里插入图片描述

7 Inspector界面图标说明:

  • 界面上从做到右图标如下:
    在这里插入图片描述
  • 详细说明如下:
图标名称说明
1Show Element Handles是否显示元素句柄
2Select Elements选择元素定位
3Tap/Swipe By Coordinates按坐标点击/滑动
4Download Screenshot下载屏幕截图
5Press Back Button按下后退按钮
6Press Home Button按主页按钮
7Press App Switch Button按应用程序切换按钮
8Native App Mode本机应用程序模式
9Web/Hybrid App ModeWeb/混合应用程序模式
10Refresh Source & Screenshot刷新源和屏幕截图
11Search for element搜索元素
12Start Recording开始录制
13Quit Session & Close Inspector退出会话并关闭检查器

8 App Source

  • App Source是以XML格式显示界面上的控件布局;
  • 如图所示:
    在这里插入图片描述

9 Selected Element

  • Selected Element是对选择的元素进行详细的信息显示;

  • 比如我们选择的是用户名输入框,右边显示如下:

在这里插入图片描述

  • 然后我们在右边的输入框中输入内容,点击发送后,可以直接将内容发送到应用程序的用户名输入框:
    在这里插入图片描述
    在这里插入图片描述

  • 右边这些属性包含了元素的accessibility idxpathelementIdpackageclass等信息,在后续我们写代码的时候,使用元素定位的时候可以用到这些属性信息。

10 Session Information

  • Session Information是关于这个Session 的详细信息,如下:
    在这里插入图片描述

  • 最下边显示了这个session的详细代码信息,你如java代码:
    在这里插入图片描述

// This sample code supports Appium Java client >=9
// https://github.com/appium/java-client
import io.appium.java_client.remote.options.BaseOptions;
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
import java.time.Duration;
import java.util.Arrays;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;

public class SampleTest {

  private AndroidDriver driver;

  @Before
  public void setUp() {
    var options = new BaseOptions()
      .amend("platformName", "Android")
      .amend("appium:automationName", "uiautomator2")
      .amend("appium:deviceName", "emulator-5554")
      .amend("appium:appPackage", "com.tencent.mobileqqi")
      .amend("appium:appActivity", "com.tencent.mobileqq.activity.SplashActivity")
      .amend("appium:language", "en")
      .amend("appium:locale", "US")
      .amend("appium:ensureWebviewsHavePages", true)
      .amend("appium:nativeWebScreenshot", true)
      .amend("appium:newCommandTimeout", 3600)
      .amend("appium:connectHardwareKeyboard", true);

    private URL getUrl() {
      try {
        return new URL("http://127.0.0.1:4723");
      } catch (MalformedURLException e) {
        e.printStackTrace();
      }
    }

    driver = new AndroidDriver(this.getUrl(), options);
  }

  @Test
  public void sampleTest() {

  }

  @After
  public void tearDown() {
    driver.quit();
  }
}

  • 比如python代码信息:
# This sample code supports Appium Python client >=2.3.0
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python

from appium import webdriver
from appium.options.common.base import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy

# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput

options = AppiumOptions()
options.load_capabilities({
	"platformName": "Android",
	"appium:automationName": "uiautomator2",
	"appium:deviceName": "emulator-5554",
	"appium:appPackage": "com.tencent.mobileqqi",
	"appium:appActivity": "com.tencent.mobileqq.activity.SplashActivity",
	"appium:language": "en",
	"appium:locale": "US",
	"appium:ensureWebviewsHavePages": True,
	"appium:nativeWebScreenshot": True,
	"appium:newCommandTimeout": 3600,
	"appium:connectHardwareKeyboard": True
})

driver = webdriver.Remote("http://127.0.0.1:4723", options=options)


driver.quit()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞致云与上海吉谛达成战略合作,获得Gitea企业版中国大陆地区独家代理权

2023年12月13日,中国领先的开源软件提供商FIT2CLOUD飞致云宣布与上海吉谛科技有限公司(以下简称为上海吉谛)正式达成战略合作,FIT2CLOUD飞致云获得上海吉谛旗下代码托管平台Gitea企业版中国大陆地区独家代理权。 Gitea项目&…

使用 Pnpm 和 Vite 构建 Vue 项目

文章目录 本地 Node 环境安装 Pnpm 包管理工具使用 Vite 创建 Vite 官网:https://cn.vitejs.dev/ 本地 Node 环境 首先,确保已经安装了 Node.js 和 npm。可以在命令行中运行 node -v 和 npm -v 来检查它们是否已经正确安装: 安装 Node.js 通…

【Git 小妙招】走进 Git 的分支管理(万字图文讲解)

文章目录 前言1. 理解分支2. 创建分支3. 切换分支4. 合并分支5. 删除分支6. 合并冲突7. 分支管理策略7.1 一个简单的分支策略(仅参考) 8. bug 分支9. 删除临时分支总结 前言 本文开始介绍 Git 的杀手级功能之⼀:分⽀。本文涉及分⽀创建,切换&#xff0c…

2. 基础数据结构-数组

2. 基础数据结构-数组 2.1 概念 数组是一种数据结构,它是一个由相同类型元素组成的有序集合。在编程中,数组的定义是创建一个具有特定大小和类型的存储区域来存放多个值。数组可以是一维、二维或多维的。每个元素至少有一个索引或键来标识。 2.2 数组特…

Leetcode—113.路径总和II【中等】

2023每日刷题(五十七) Leetcode—113.路径总和II 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

【数谷·企声】贵州恩典集团:半年内实现上规入统,大力推广贵州酱酒品牌

近年来,贵阳贵安大力实施“数字活市”战略,数字产业高速增长,数字红利加速释放,营商环境持续优化,成功吸引了一批批优质企业落户,贵州恩典企业管理(集团)有限公司(以下简…

DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点

DICOM 文件的结构,在网上有很多的学习资料,这里只介绍些容易混淆的概念,作为回看笔记。 1. 传输语法 每个传输语法,起都是表达的三个概念:大小端、显隐式、压缩算法 DICOM Implicit VR Little Endian: 1.2.840.1000…

Linux 常用的操作命令

我们习惯的使用Windows,安装软件进行使用,比如 WPS,浏览器,一些工具,但是在Linux上就需要用命令去操作,也可以使用像Ubuntu 和 CentOS这类的可视化面板 Linux系统是开源的,所以开发人员可以反复的发现Bug以…

高项备考葵花宝典-项目进度管理核心方法加强理解-关键路径法

关键路径法(Critical Path Method,CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图。关键路径法将项目分解成为多个独立的活动并确定每个活动的工期,然后用逻辑关系&…

​hashlib --- 安全哈希与消息摘要​

源码: Lib/hashlib.py 本模块针对许多不同的安全哈希和消息摘要算法实现了一个通用接口。 包括了 FIPS 安全哈希算法 SHA1, SHA224, SHA256, SHA384, SHA512, (定义见 the FIPS 180-4 standard), SHA-3 系列 (定义见 the FIPS 202 standard) 以及 RSA 的 MD5 算法 (…

首场“解数Talk” 直播来了——大模型语料数据联盟开源数据集解读

一、解数 Talk 介绍 为帮助广大开发者更好地了解大模型语料数据联盟发布的AI大模型语料数据,沟通大模型企业在AI视角下的数据需求,不断服务大模型产业生态和落地应用,联盟发起单位上海人工智能实验室联合成员单位共同打造“解数 Talk”系列直…

智能优化算法应用:基于引力搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于引力搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于引力搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.引力搜索算法4.实验参数设定5.算法结果6.…

Vue中发送Ajax请求的方式axios及其跨域问题的解决方案代理机制的配置和原理

Vue中的Ajax请求 现在比较流行的开发方式为异步调用,前后台以异步Ajax请求的方式进行交换数据,传输的数据使用的是JSON Ajax请求发送后,当浏览器接收到服务器的响应内容后不会重新加载整个页面,只会更新网页的部分实现局部刷新的效果 发送AJAX异步请求的常见方式包括 使用浏…

Java 对接企业微信(文本消息推送)

Java 对接企业微信(文本消息推送) 背景版本代码POM配置实体工具类发送消息测试配置文件配置文件中的参数来源secretcorpidagentid 执行异常原因 文档 背景 公司的项目,通知信息打算接入企业微信通知。提前做下实验。 版本 JDK 21 SpringBoo…

故障排查方法与技巧

判断网络是否稳定&#xff0c;最重要的两个命令 ping 10.28.0.23 -t -l 1000 -t &#xff1a;无限循环ping -l&#xff1a;指定数据包大小 内网环境< 1ms,是较好的网络&#xff0c;如果跳到100多&#xff0c;说明网络不稳定 telnet ip地址空格端口号 表示不通 数据库…

老师发成绩单攻略:5种方法让群发成绩变得更高效

作为老师&#xff0c;发布成绩单是一项重要的任务。为了更高效地完成这项任务&#xff0c;本文将介绍5种方法&#xff0c;帮助老师群发成绩单更加高效。 一、提前规划&#xff0c;做好准备 在发布成绩单之前&#xff0c;老师需要提前规划好发布的时间、方式、接收对象等&#…

路径总和(递归)

112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &a…

34、卷积实战 - 手写一个基础卷积算法

前面基本上把卷积这一算法的原理和公式介绍完了,如果还有不懂的,可以多翻几遍前面的章节内容,深入理解一下。 本节加一个实战,大家可以手动来实现一个卷积算法,本文中以 python 代码为例,C++ 的代码可以查看本节后面的链接。 说到卷积实现,其实就是自己手写一个卷积算…

js基础:简介、变量与数据类型、流程循环控制语句、数组及其api

JS基础&#xff1a;简介、变量与数据类型、流程循环控制语句、数组及其api 一、简介 1、js概述 tip&#xff1a;JavaScript是什么&#xff1f; 有什么作用&#xff1f; JavaScript&#xff08;简称JS&#xff09;是一种轻量级的、解释性的编程语言&#xff0c;主要用于在网页…

SpringCloud微服务(简略笔记二)

Docker 概念 docker和虚拟机的差异 * docker是一个系统进程&#xff1b;虚拟机是在操作系统中的操作系统 * docker体积小&#xff0c;启动速度&#xff0c;性能好&#xff0c;虚拟机体积大&#xff0c;启动速度慢&#xff0c;性能一般 镜像和容器 镜像&#xff08;image&…