分类目录归档:测试

一个开发人员对于Appium的概述


一个开发人员对于Appium的概述

在阅读这个此文档之前,请确保你已经阅读并理解了关于Appium的基本概念, 以及关于如何参与Appium贡献说明

技术愿景

Appium致力于成为一个移动JSONWP前端,实现最佳的应用自动化技术。仅此而已。我们想要采用所有不同的 但自带亮点的自动化引擎,通过制作Appium驱动程序来平滑它们的差异和瑕疵,同时将它们纳入Appium。这与 Selenium项目有异曲同工之妙。对于我们而言,我们想要每一个驱动都是一个独立的实体(单独的repo, 测试, 等等)即便它们使用共享库,这一举措会使Appium驱动程序的开发变得尽可能简单,而且不拘泥于样板。我们...

阅读全文...

从源码运行Appium


从源码运行Appium

你想从源码运行Appium并帮助修复BUG和添加功能吗? 真棒!只需要fork工程,添加一个修改,然后发送pull请求即可! 在开始之前请阅读我们的代码风格指南(Style Guide。 在发送pull请求前请确保通过单元和功能测试;关于如何运行测试等更多信息,请继续阅读!

首先,确保你阅读README文件且按照设置说明走。

从源码配置 Appium

Appium 的配置涉及:

  1. Appium Server —— 在你的测试代码和设备或模拟器之间通过 Appium Server 来回发送消息
  2. 测试脚本 —— 任何客户端语言都可以,只要和 Appium 兼容

运行...

阅读全文...

Settings


Settings

Settings是appium引入的一个新概念。 它们目前不是Mobile JSON Wire协议或Webdriver规范的一部分。

Settings是用来指定appium server的工作方式。

Settings有以下特点:

  • 可变性,Settings在一个会话中是可以被修改的。
  • 临时性,Settings只对当前会话生效,新建立的会话会被重置。
  • 局限性,Settings只用来控制appium server,不能用于控制被测应用或设备。

以Android的ignoreUnimportantViews为例。Android中可以设置ignoreUnimportantVi...

阅读全文...

Appium 事件计时


Appium 事件计时

Appium 提供了一个能力,可以获取关于启动信息和命令执行时间的计时信息。这是由 eventTimings 这个初始化参数控制的高级功能(把这个参数设置为 true 来记录事件的计时信息)

打开这个参数,GET /session/:id 这个接口的响应结果(也就是,driver.getSessionDetails() 的响应结果,或者类似的,取决于客户端实现)中会包含 events 属性。下面是 events 属性的结构

{
    "<event_type>": [<occurence_timestamp_1>, ....

阅读全文...

跨域iFrame的自动化 同源策略会阻止Appium对和父页面不同域的iFrame进行自动化测试。


跨域 iFrame 的自动化

同源策略 会阻止 Appium 对和父页面不同域的 iFrame 进行自动化测试。

子域名的解决方案

如果父页面和 iFrame 使用同一个 domain (比如 site.comshop.site.com),你可以在父页面和 iFrame 里将 document.domain 设置为一个共同的domain。这就解决了同源问题。

父页面:

<html>
  <head>
    <script>
      document.domain = 'site.com';
    </script>
  <...

阅读全文...

如何搭建并定制 WebDriverAgent Server


如何搭建并定制 WebDriverAgent Server

Appium 的 iOS 版本的后端用的是Facebook's WebDriverAgent。该后端是基于苹果公司的 XCTest 框架,所以也有所有XCTest 框架已知的问题。其中有些问题我们正在设法解决,有一些在现阶段可能无法解决。本文中描述的方法已经能够使您完全掌握在设备上如何构建、管理和运行WDA。通过这种方式,您可以在CI环境中对您的自动化测试进行微调,并使其在长期运行的情况下更加稳定。

重点:

  • 如果使用了Appium的默认设置,则不需要如下的步骤。服务器将为您搞定一切,当然你也不能对WDA做太多控制。
  • 对连接的被...

阅读全文...

Selenium Grid


Selenium Grid

通过服务器参数 --nodeconfig,可以将 appium 服务器注册到本地的 Selenium grid (Grid 的配置文档)

> appium --nodeconfig /path/to/nodeconfig.json
# 或者使用源文件执行
> node . --nodeconfig /path/to/nodeconfig.json

在 Selenium 节点(Node)的配置文件里,你需要定义 browserNameversionplatform,然后 Grid 会通过这些参数将你的测试重定向到正确的设备上。你还需要配置 h...

阅读全文...

将你的iOS测试从UIAutomation(iOS 9.3及更高版本)迁移到XCUITest(iOS 9.3及更高版本)


将你的iOS测试从UIAutomation(iOS 9.3及更低版本)迁移到XCUITest(iOS 9.3及更高版本)

对于 iOS 自动化,Appium 依赖苹果提供的系统框架。对于 iOS 9.2 及更低版本,苹果唯一的自动化技术被称为UIAutomation,它运行在 “Instruments” 中。从 iOS 10 开始,苹果已经完全删除了 UIAutomation 工具,因此 Appium 不可能按照以前的方式进行测试。同时,苹果推出了一款名为 XCUITest 的新型自动化技术,从 iOS 9.3 到 iOS 10 及以上版本,这将是苹果唯一支持的自动化框架。

Appium...

阅读全文...

多语言支持


多语言支持

编程语言在处理非拉丁字符时候有一个问题,带重音符号的字符有多种编码方式。比如, 字母é,有两种编码:一个单字符é(Unicode的LATIN SMALL LETTER E WITH ACUTE (带有尖标的小写拉丁字母E))和字母e后跟上音标́的组合(COMBINING ACUTE ACCENT (组合尖音标))。为了解决这个问题,就有了normalization(标准化),一种让"相同的字符串有一个唯一的二进制表示" 的运算。

幸运的是,对ASCII文本(即不需要再被标准化的文本)进行标准化不会引起任何变化,且执行多次运算也不会有副作用。 因此,这个标准化函数在文本上调用不...

阅读全文...

调整网络连接


调整网络连接

Selenium [移动 JSON 协议规范](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md) 支持一个获取和设置网络连接的[API](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#104)。这个 API 会设置一个掩码,每一个可能的网络状态对应一个掩码

值 (名称) 数据 Wifi 飞行模式
0 (无网) 0 0 0
1 (飞行模式) 0 0 1
2 (Wifi) 0 1 0...

阅读全文...