如何编写文档


如何编写文档

##用于写一个 h2 头。每个文档必须以 h2 开头。 这是为了支持 appium.io 文档生成。不要使用---下划线方法创建标题。 不要对标题使用 h1 #===,因为目录表不支持这样(文件夹名称将用作 h1)。

副标题

### 用于编写副标题

常规标题

#### 用于不出现在目录里的标题。 不要使用 h5 ##### 或是 h6 ######

换行符

不要使用 -- 或者 ---这样的换行符。

链接

链接到 readme :

[readme](../../README.md)

链接到捐赠:

[捐赠](../../CONTRIBUTING.md)

链接到另一个...

阅读全文...

给贡献者的风格指南


给贡献者的风格指南

感谢您对Appium的贡献!以下是我们编写javascript代码时需要遵守的准则,请确认你的提交能符合这些规范,这有利于我们合并你的代码时能保持良好的编码风格。其中最核心的准则是:使你的代码与其他代码的编码风格保持一致

衍合(Rebasing)

每个 pull 请求中的提交(commits)都应该包含逻辑变更(logical changes)。 如果有多位贡献者,请确保他们各自都有自己的提交记录,修改作者信息不是一个好主意。合并(merge)提交必须从 pull 请求中 rebase 。

检错(Linting)

所有的代码(除了使用了 Apple 私有方法的boo...

阅读全文...

一个开发人员对于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>, ....

阅读全文...

如何搭建并定制 WebDriverAgent Server


如何搭建并定制 WebDriverAgent Server

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

重点:

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

阅读全文...

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


跨域 iFrame 的自动化

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

子域名的解决方案

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

父页面:

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

阅读全文...

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...

阅读全文...