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…

c#学习笔记:CheckedListBox控件的用法

一、常用属性 (1)、CheckOnClick属性 CheckOnClick属性是布尔类型的值,如果为True,那么单击条目就能将条目勾选;如果为false,则要双击条目才能将其勾选。 2)ColumnWidth属性 ColumnWitdh属性…

调查过程之访谈

访谈可以根据不同的分类标准进行分类,以下是几种常见的分类方式: 1. 根据受访者的身份分类:政治家访谈、名人访谈、专家访谈等。 2. 根据访谈形式和方式分类:面对面访谈、电话访谈、邮件访谈、视频访谈等。 3. 根据访谈的主题分…

【python】pillow (PIL)库的用法介绍

Pillow(也称为PIL)是一个Python图像处理库,它提供了丰富的图像处理功能。下面是Pillow库的一些常用功能和用法介绍: 打开和保存图像: 使用Image.open()函数打开一个图像文件,并使用save()函数保存图像文件…

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

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

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

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

nebula解压版 启动例子; ssh X11Forward

nebula-graph安装启动 下载页面 nebula启动参考 wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.ubuntu2004.amd64.tar.gzcd /app/nebula-graph-3.6.0.ubuntu2004.amd64/tar -zxvf nebula-graph-3.6.0.ubuntu2004.amd64.tar.gz -C /app/ln -s /a…

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

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

FreeRTOS的 vTaskDelay() 函数和 vTaskDelayUntil() 函数

关于两个函数 vTaskDelay() 函数:相对延时,即相对于当前时间进行延时 vTaskDelayUntil() 函数:绝对延时,即相对于上一次的唤醒时间进行延迟 这两个函数延时都是延时节拍数的!而每个节拍多长时间可见 FreeRTOSConfig…

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

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

英文字母替换加密(后移n位)

思路&#xff1a;首先写出后移&#xff08;前移&#xff09;1位的情况 &#xff0c; 然后逐渐累加至N位情况 #include <stdio.h> void test(char arr[] , int n ) { int i 0; int z 0; if( n < 0 ) { while( i ! n ) { …

php生成唯一ID的5种方法介绍

php生成唯一ID的5种方法介绍 工作中使用到唯一ID的场景非常多&#xff0c;如临时缓存文件、临时变量、临时安全码等。 uniqid()函数基于以微妙计的当前时间&#xff0c;生成一个唯一的ID。由于生成唯一ID与微妙时间关联&#xff0c;因此生成ID的唯一性非常可靠。 生成的唯一…

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. 从链表中移除节点 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1&#xff1a; 输入&#xff1a;head [5,…

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

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

kafka容灾演练的方案

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

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

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

Android测试——(下篇)

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

STM32 学习(三)OLED 调试工具

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

supervisor + uwsgi 部署python服务流程

supervisor uwsgi 部署python服务流程 最近由于某个python服务不稳定&#xff0c;有时候是造成服务器down机&#xff0c;有时候是服务本身突然就挂了。查了一下原因&#xff0c;发现是内存资源占用过高导致的&#xff0c; 为了让服务稳定运行&#xff0c;便打算引入superviso…