Skip to content

Instantly share code, notes, and snippets.


Jonathan Lipps jlipps

View GitHub Profile

Keybase proof

I hereby claim:

  • I am jlipps on github.
  • I am jlipps ( on keybase.
  • I have a public key ASA5enU7HxGauG4EsLazqFp6THAD-Uts_EWqs9QILVU7IQo

To claim this, I am signing this object:

jlipps /
Last active Jul 15, 2020
Appium 2.0 Proposal

Appium 2.0

As described in the Appium 2.0 Epic, Appium needs to evolve from being a server which bundles many drivers to one which by default doesn't bundle any drivers, and instead provides an interface for retrieving and using drivers. Essentially, "Appium" will become:

  • A set of spec extensions to the WebDriver W3C protocol (eventually upstreaming those extensions to the official protocol)
  • A set of code libraries (like BaseDriver or jsonwp-proxy that make it easy to write Appium drivers)
  • A driver runner (this is what the main Appium package currently does); the difference is that drivers will not come bundled with the runner by default
  • A plugin interface based around command-level hooks
  • An API and CLI interface for retrieving and managing different versions of Appium-compatible drivers and plugins
jlipps /
Created Feb 23, 2016
How to reset Appium master

We recently swapped Appium branches so that the old 1.5 branch is now master. This is great! Unless you already have a local copy of Appium master checked out and want to do a git pull. Unfortunately since we have reset master this is no longer possible. Here's how you do it.

  1. Ensure you have no local changes or commits you want to save. (If you do, get them in a branch).
  2. Figure out what your Appium remote branch is called. For me it is upstream, for you it might be origin. Below, I will call this <remote> and you should replace it with the reality for your own local checkout.
  3. git checkout master
  4. git reset --hard fbbb126 -- this will get you to a place in the git history prior to the divergence
  5. git pull <remote> master -- this will get all the new code
  6. You might also need to rm -rf submodules/ in order to have a clean checkout, since we no longer track submodules in the Appium git repo.

That's it! Happy hacking.


Keybase proof

I hereby claim:

  • I am jlipps on github.
  • I am jlipps ( on keybase.
  • I have a public key whose fingerprint is 90EC 49A9 FFE8 F843 0536 3380 4737 214D CDE0 B65C

To claim this, I am signing this object:

View gist:9650479
19:04:125 INFO ApplicationStore.<init> App archive folder:/Users/chef/log/applications
19:05:254 INFO IOSServer.init
Beta features enabled ( enabled by -beta flag ): false
tests can access the server at
server status:
Connected devices:
Monitoring '/Users/chef/log/applications' for new applications
View npm.log
npm info it worked if it ends with ok
npm verb cli [ '/usr/local/bin/node',
npm verb cli '/usr/local/bin/npm',
npm verb cli 'install',
npm verb cli '-g',
npm verb cli '--verbose',
npm verb cli 'appium' ]
npm info using npm@1.3.8
npm info using node@v0.11.7
npm verb cache add [ 'appium', null ]
View appium2.js
"use strict";
var driverBlock = require('../../helpers/driverblock_harmony.js')
, describe = driverBlock.describeForApp('UICatalog')
, it =
, should = require('should');
describe('basic', function(h) {
it('should confirm element is not visible', function*() {
View appium1.js
/*global it:true */
"use strict";
var describeWd = require("../../helpers/driverblock.js").describeForApp('UICatalog')
, should = require('should');
describeWd('basic', function(h) {
it('should confirm element is not visible', function(done) {
h.driver.elementsByTagName('tableCell', function(err, els) {
View mobile-spec-minutes
Day 1: Spec Planning
Introductions :)
jlipps: works at Sauce and Appium
santi: works at Sauce. Will be architecting the backend of Sauce to support this spec.
dburns: works at Mozilla. Works on Marionette (webdriver with extras for Mozilla)
freynaud: ebay. iosdriver
je: works at facebook. ramping up on iosdriver work at facebook
dominik: ebay. creator of selendroid.
You can’t perform that action at this time.