test ui-02-UI 测试组件之 Appium 入门介绍

Appium简介

正如主页所述,Appium的目标是支持许多不同平台(移动、Web、桌面等)的UI自动化。

不仅如此,它还旨在支持用不同语言(JS、Java、Python等)编写的自动化代码。

将所有这些功能组合到一个程序中是一个非常艰巨的任务,如果不是不可能的话!

为了实现这一目标,Appium有效地分为四个部分:

  1. Appium核心 - 定义核心API
  2. 驱动程序 - 实现与特定平台的连接
  3. 客户端 - 用特定语言实现Appium的API
  4. 插件 - 更改或扩展Appium的核心功能

因此,要开始使用Appium进行自动化,您需要:

  1. 安装Appium本身
  2. 为目标平台安装一个驱动程序
  3. 为目标编程语言安装一个客户端库
  4. (可选)安装一个或多个插件

这些是基础知识!如果您准备好开始,可以继续查看快速入门!

如果您希望了解更多有关其工作原理的详细信息,请参阅以下页面以获取背景材料:

  • Appium核心
  • Appium驱动程序
  • Appium客户端

Appium工作原理

正如主页所述,Appium是一个开源项目和相关软件生态系统,旨在简化许多应用平台的UI自动化。随着Appium 2的发布,Appium有以下主要目标:

  1. 使平台特定的自动化功能在跨平台的标准API下可用。
  2. 允许从任何编程语言轻松访问此API。
  3. 提供工具以便方便地共同开发Appium扩展。

因此,无论您了解哪个应用平台,比如iOS或Android,Appium都希望开发人员和测试人员能够按照单一、统一的API编写该平台的UI自动化代码。基于Appium的目标,我们需要回答许多问题,以使所有这些都能正常工作:

  1. “单一、统一”的API应该是哪个?
  2. 我们如何将该API映射到特定平台的自动化行为?
  3. 我们如何使该API可通过多种流行的编程语言轻松访问?

在这里,还有一个更大的问题潜伏在背后,因为除了iOS和Android之外,还有更多的应用平台:

  1. 我们如何为所有平台启用自动化?

探索Appium对这些问题的回答可能不是了解Appium的最快方式,但肯定是一个很好的方式!所以让我们深入研究。

Appium客户端简介

如主要概览中所讨论的那样,Appium基于W3C WebDriver规范。

这意味着Appium实现了一个客户端-服务器架构。服务器(由Appium本身以及您用于自动化的任何驱动程序或插件组成)连接到测试设备,并实际负责在这些设备上执行自动化。

客户端(由您,Appium测试作者驱动)负责通过网络向服务器发送命令,并接收服务器的响应。

这些响应可用于判断自动化命令是否成功,或可能包含您查询应用程序状态的信息。这份文档是对此方程式中客户端部分的概念性介绍。

有关方程式的服务器端(即Appium如何实际控制设备?)的更多信息,请查看我们的Appium驱动程序简介。要跳转到Appium客户端库链接列表,请查看客户端列表。

有哪些自动化命令可用?这取决于您在任何给定会话中使用的特定驱动程序和插件。

例如,标准的命令集可能包括以下内容:

  • 查找元素

  • 点击元素

  • 获取页面源码

  • 获取屏幕截图

如果您查看WebDriver规范中的这些命令,您会注意到它们并没有根据任何特定的编程语言定义。

它们不是Java命令、JavaScript命令或Python命令。

相反,它们构成了一个HTTP API的一部分,可以从任何编程语言(或没有!如果您愿意,可以只使用cURL)中访问。

因此,例如,查找元素命令对应于发送到HTTP端点/session/:sessionid/element的HTTP POST请求(在这种情况下,:sessionid是服务器在先前调用Create Session时生成的唯一会话ID的占位符)。

这些信息主要对于开发与WebDriver规范兼容的技术的人员是有用的。对于试图编写Appium或Selenium测试的人来说,这并不特别有用。在编写Appium测试时,您希望使用熟悉的编程语言。幸运的是,存在一组Appium客户端库,负责与Appium服务器进行HTTP通信。它们不会直接暴露特定编程语言的HTTP细节,而是为特定编程语言公开了一组“本地”命令,使得对于测试作者来说,就感觉像是在编写Python、JavaScript或Java。

例如,以下是相同的一组简单的Appium命令,使用每种语言的推荐Appium客户端绑定(请注意,这不是包含所有适当导入的工作示例代码;请参阅每个客户端库的设置和命令参考文档):

const element = await driver.$('//*[@text="Foo"]');
await element.click();
console.log(await element.getText())
console.log(await driver.getPageSource())

这些脚本,尽管使用不同的编程语言编写,但在底层执行的是相同的操作:

  1. 使用xpath作为using参数,使用表达XPath查询的值参数调用Find Element。(如果您对这些术语感到困惑,您可能会发现介绍Appium或Selenium的内容很有用)
  2. 使用上一步调用中找到的元素的ID调用Click Element。
  3. 使用相同元素的ID调用Get Element Text,并将其打印到控制台。
  4. 调用Get Page Source检索页面/应用源代码,并将其打印到控制台。

在选择或使用客户端之前,需要注意的另一件事是每个客户端都是独立维护的。仅因为一个客户端中有某个功能,并不意味着另一个客户端也有(尽管所有客户端至少支持标准的W3C协议以及任何常见的Appium扩展)。仅因为一个客户端具有一套不错的辅助函数,并不意味着另一个客户端也有。有些客户端保持非常频繁的更新,而其他客户端则没有!因此,在选择库时,首要考虑的是要使用的编程语言,其次考虑的是库的功能齐全程度和维护情况如何!

要了解如何使用Appium客户端,请访问该客户端的主页以获取更多信息。在许多情况下,给定语言的Appium客户端是建立在该语言的Selenium客户端之上的,因此某些Appium客户端可能仅记录在Selenium客户端之上添加的功能。总之,为了获取完整的参考信息,您可能需要同时访问Appium客户端文档和Selenium客户端文档。

这就是关于Appium客户端的所有需要知道的内容!请转到客户端页面查看当前客户端列表。

在这里插入图片描述

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

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

相关文章

工程中uint8变量文件比uint32变量文件大4字节的问题排查

前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02gmail.com,此消息至2025年1月1日前均有效 (2&#xff0…

uniapp中组件库的Textarea 文本域的丰富使用方法

目录 #平台差异说明 #基本使用 #字数统计 #自动增高 #禁用状态 #下划线模式 #格式化处理 API #List Props #Methods #List Events 文本域此组件满足了可能出现的表单信息补充,编辑等实际逻辑的功能,内置了字数校验等 注意: 由于…

金和OA SAP_B1Config.aspx存在未授权访问漏洞

产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统升开发平台,电子政务一体化平台智慧电商平合等服务 漏洞概述 金和OA SAP_B1Config.aspx存在未授权访问漏洞,攻击…

Jenkins的Transfers路径怎么配置,解决Transfers配置不生效的问题

Transfers配置: 1.配置Source files: 要填写jar包的相对路径,从当前项目工作空间的根目录开始,看看我的工作空间你就懂了 !如图 我填的是 parent/build/libs/parent-1.0.0.jar,即不要 fdw1/ 的前缀 2.配置Remote directory: 远程目标文件夹,也就是你jar包要放到远程…

【LeetCode】每日一题 2023_12_31 一年中的第几天(日期)

文章目录 随便聊聊时间题目:一年中的第几天题目描述代码与解题思路 随便聊聊时间 LeetCode?启动!!! 12 月的打卡勋章,get! 题目:一年中的第几天 题目链接:1154. 一年中…

Nextjs打包类型检查报错ype error: Property ‘card_list‘ does not exist on type(已解决)

在Nextjs 中 在数组 map 的时候报错如下: 里面的数据类型是 data1 {cart_list:[]} 那么在 声明类型的时候 使用 data1:{card_list:any[]} export default function Card({authStates,data1,data2}:{authStates:boolean;data1:{card_list:any[]};data2:any[]}) {}) 这样就…

2024.1.3每日一题

LeetCode每日一题 2487.从链表中移除节点 2487. 从链表中移除节点 - 力扣(LeetCode) 题目描述 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1: 输入:head [5,…

设置代理IP地址对网络有什么影响?爬虫代理IP主要有哪些作用?

在互联网的广泛应用下,代理IP地址成为了一种常见的网络技术。代理IP地址可以改变用户的上网行为,进而影响网络访问的速度和安全性。本篇文章将探讨设置代理IP地址对网络的影响,以及爬虫代理IP的主要作用。 首先,让我们来了解一下代…

kafka容灾演练的方案

背景 kafka可以通过MirrorMaker工具把集群的数据从一个集群同步到另一个集群,通过在另一个数据中心创建灾备集群的方式可以做到容灾的效果,但是如果我们不通过如此重量级的工具也想达到容灾演练的目的,可以怎么做呢 kafka简单容灾实现 当原kafka集群发…

Allegro看不到PCB元件的丝印和装配层

#创作灵感# PCB板到处Gerber文件加工回来,板子上没有元件边框丝印,但是有元件编号。因为只是样板,影响不大,就没有当回事。直到发出去贴片,发送了钢网层和装配层,反馈说不知道元器件的极性。这就纳闷了&…

Android测试——(下篇)

Android测试(五):Instrumented 单元测试 Instrumented 单元测试是在真机并且可以上运行的测试,它利用Android框架API和支持的API(如Android测试支持库)。如果你的测试需要访问工具信息(例如目标…

STM32 学习(三)OLED 调试工具

目录 一、简介 二、使用方法 2.1 接线图 2.2 配置引脚 2.3 编写代码 三、Keil 工具调试 一、简介 在进行单片机开发时,有很多调试方法,如下图: 其中 OLED 就是一种比较好用的调试工具: OLED 硬件电路如下&#xff0c…

linux centos 部署 jenkins

一、试了用容器部署,不行。(建议别用容器部署) 二、直接部署在主机上 1、安装java环境 yum install java-11-openjdk-devel # 检查 java -version # 打印 [rootiZwz9a99mctbkabkh2imhdZ init.d] java -version openjdk version "11.0.21" 2023-10-17 L…

轻松上手:Postman Interceptor 插件使用指南

什么是 Postman? Postman 是一种用于测试和开发 API 的工具,让开发者可以轻松地构建、发送、调试 HTTP 请求,并检查响应结果。通过Postman,开发者可以在不编写代码的情况下快速测试 API 的正确性和可靠性。Postman 还支持协作和自…

Cesium加载大规模三维数据渲染性能优化方案

根据实际项目经验和近期的论文,总结一下Cesium加载大规模三维数据性能优化方法。个人认为在实际的GIS数字孪生项目中,其可行的优化手段主要有三种: (1)通过专业的转换工具CesiumLab等对原始的三维模型进行轻量化处理,包…

第4课 FFmpeg读取本地mp4文件并显示

在上节课,我们使用FFmpeg实现了一个最简单的rtmp播放器,它看起来工作正常。这节课,我们尝试让它来播放本地的mp4文件试试。 1.压缩备份上节课工程文件夹为demo3.rar,并修改工程文件夹demo3为demo4,重要的事情再说一遍…

rime中州韵小狼毫 Upper lua Filter 首字母大写滤镜

在 rime中州韵小狼毫 easyEnglish输入法 一文中, 我们定义了 easy-English 输入方案。输入效果如下👇: 我们知道,在英文世界中,单词有首字母大写的习惯,如果我们输入 english 单词后,再回来改…

Qt6.5类库详解:QComboBox

哈喽大家好,欢迎关注公众号(20YC编程),有免费C视频课程哦! -今日内容- 1. QComboBox介绍 QComboBox是一个下拉列表框组件类,它提供了一个下拉列表供用户选择,也可以直接当作一个QLineEdit用作输入。 QComboBox除了显…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

微服务-OpenFeign-工程案例

Ribbon 前置知识 是NetFlix的开源项目,主要来提供关于客户端的负载均衡能力。从多个服务提供方,选取一个节点发起调用。 Feign:NetFlix,SpringCloud 的第一代LB(负载均衡)客户端工具包。 OpenFeign:SpringCloud自研&#xff0c…