22 Commits
Author SHA1 Message Date
Kazuaki Matsuo 31f16ac92f Fix implicit wait for w3c (#164)
* fix timeouts for w3c

* revert lock file

* add validation for previous timeouts

* implement custom validator for W3C

* improve if condition

* define isW3CProtocol

* rewrite validation a bit

* apply util.hasValue and string protocol

* add tests

* refactor timeouts for mjsonwp and w3c

* use const

* remove previous timeouts

* use undefined

* rename to timeouts again

* wrap some commands

* remove ...args

* define each command
2018-01-12 08:55:38 +09:00
Dan Graham 45e31b15ac Set automations in one file (#167)
* Made an 'automations.js' file that lists all valid automations as an Object instead of hard-coding it
* appium/appium will use this instead of hardcoding automation names
* Make desired-caps pull in the values of those automations for validation instead of hard-coding them
* Expose 'validAutomations' to Driver object
2018-01-11 10:07:33 -08:00
Dan Graham 281916ffee W3C remediations (#165)
* Fixed a defect in 'firstMatch' validation
  * Previously, it was validating the firstMatch capabilities and was failing on the first validation failure, which is a problem if firstMatch has a length > 1 and it fails before finding a potentially passing capabilities set is found
  * Now, it doesn't error-out on the first failure. If it fails, it skips over it to the next one until it finds one that passes and returns that.

* Altered the 'presence' constraint validation
  *  Don't validate 'presence' on 'alwaysMatch' because if a capability isn't present on 'alwaysMatch' it may be present in one of the 'firstMatch' capabilities
  *  Validate presence on all of the 'firstMatch' capabilities, except for the keys that are present in 'alwaysMatch'. If the key is in 'alwaysMatch', strip out the presence constraint because we know that it has passed already

* Changed the default protocol
  * If MJSONWP _and_ W3C are provided, initiate a W3C session by default. If clients are passing in W3C parameters to create a session, we can safely assume that they've implemented the rest of the W3C spec

* Improved error logging
  * If errors were found, show a message saying `Could not find matching capabilities: ${errors}` where `errors` are a list of all the validation error messages for each of the attempts to validate `firstMatch` caps
  * If `firstMatch` caps has a length of one, then don't show the message saying `Could not find matching capabilities` portion of it, just show the errors

* Other remediations
  * Allow `alwaysMatch` and `firstMatch` to be `null` or `undefined`
  * Added single quotes around names of capabilities when showing their errors
2018-01-10 10:37:11 -08:00
Dan Graham 376a0d3089 Make it so that 'status' is only returned for MJSONWP (#160)
Also:
* Make the 'fake-driver' a MJSONWP driver
* Fix unit tests that were broken when being called in 'appium-fake-driver'
2017-12-22 12:20:48 -08:00
Dan Graham d41b3629aa Don't validate 'presence' on firstMatch caps (#159)
* Doesn't make sense to validate 'presence' in the firstMatch caps, because the firstMatch caps extend alwaysMatch
* Only 'alwaysMatch' should validate 'presence'
2017-12-21 09:55:27 -08:00
Dan Graham 53de387100 Handle capabilities prefixes (#153)
* Strip out 'appium:' prefixes
* Reject standard capabilities that contain the 'appium:' prefix
* Expose 'processCapabilities' as API method
2017-12-13 14:53:05 -08:00
Dan Graham 4d2a5bd000 w3c routes (#147)
* Add aliased W3C routes
* Implement getTimeouts command
* getTimeouts returns an object containing all the timeouts and their values as key-value pairings
* Added routeHandler too
* Added w3c routes
2017-11-21 04:54:39 -08:00
Dan Graham 308e560ca1 W3C Error Formatting (#145)
* Remember protocol requested in createSession
  * Also renamed 'processCaps' to 'processCapabilities'
  * Checks the parameters in 'createSession' and determines if it's W3C or MJSONWP
* Add W3C error format
  * Add W3C status codes to errors
  * When deciding error format to return in mjsonwp.js, check format and then return eitherJSONWP or W3C format
2017-11-21 04:54:39 -08:00
Isaac A. Murchie 01e9914b66 Update linting and add coverage (#131) 2017-08-15 08:53:47 -04:00
Isaac A. Murchie 3bffc168b8 Allow downloaded app urls to have query strings (#125)
* Allow downloaded app urls to have query strings

* Readjust some of the work
2017-07-07 07:24:59 -04:00
Jonathan Lipps acd890bb20 fix bug in DeviceSettings where we could mutate external object 2017-06-15 14:35:33 -07:00
Dan Graham 0bf5acbd52 Removed adm-zip (#118)
* Added a test for unzipFile (which uses adm-zip)
* Tested that it worked with adm-zip and then failed once adm-zip was taken out
* Replaced 'adm-zip' with zip.extractAllTo from appium-supprt
2017-04-26 17:55:46 -07:00
Dan Graham 9d1b2cedae Implemented capabilities spec (#117)
* Update  hash

* Add validateCapabilities and parseCapabilities

* Added merge capabilities

* Moved capabilities into it's own file

* Added capabilities as a possible required param

* Can pass desiredCapabilities or capabilities into createSession

* Remove 'required' desiredCapabilities

* desiredCapabilities isn't required any more because we can provide capabilities as well
* Will need to  update validation logic in 'driver.createSession' to do the validation there instead

* Code cleanup

* Skip presence constraint in parseCapabilities

* We don't need to check that items are present until after we've formed the matched capabilities

* Added validation function to routes

* Function 'validate' takes params as an arg and then returns a message if the validation fails
* Uses this to validate that either "capabilities" or "desiredCapabilities" was provided

* Renamed capabilities to caps

* Move caps required validator from process to parse

* Removed InvalidParametersError

* Update BadParametersError so that if a message is added as the 3rd argument it shows a different error message

* Made validation re-usable
2017-04-07 15:12:12 -07:00
Jonathan Lipps d75bde2a0e add event timing framework to base driver 2017-03-03 13:41:02 -08:00
Jonathan Lipps 0ad8e49b8e error out if someone tries to use both fullReset and noReset together 2017-01-31 14:17:36 -08:00
Sam Park 40a9538321 Fix handling non-ZIP files
APK files were not being installed because they were being written to a file without an "apk" extension. So added back the appExt suffix logic. If it's given and the downloaded file is not a ZIP file, then everything behaves normally. If the downloaded file is a ZIP file, then regardless of what we thought initially, it will be unzipped and placed into another temp location.
2016-11-11 23:21:02 -08:00
Isaac Murchie 0df402b1b2 Add linting and pre-commit hooks 2016-07-12 09:48:01 -07:00
Isaac Murchie b883d8601b Add basic getStatus method 2016-07-08 09:21:29 -07:00
Isaac Murchie e44ed397f6 Add ability to manage delegated drivers 2016-07-01 09:15:33 -07:00
Isaac Murchie 6086ae0b29 Make sure the server is closed when we call close 2016-06-22 08:16:36 -07:00
Jonathan Lipps 12c8145bc0 bring appium-express into basedriver 2016-05-05 17:25:08 -07:00
Jonathan Lipps 48113db62a merge node-mobile-json-wire protocol project into basedriver (and bump package to denote breaking changes) 2016-05-04 21:28:25 -07:00