-
-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Improve the documentation on unlock (#979)
- Loading branch information
1 parent
fead5b4
commit 15ae78b
Showing
7 changed files
with
103 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# Unlock | ||
|
||
Espresso driver allows dealing with the Android lock screen using various APIs. | ||
This article describes the available APIs and their options. | ||
|
||
## Unlock On Session Startup | ||
|
||
Espresso driver provides the following [capabilities](../../README.md#device-locking) to deal | ||
with the system lock screen: | ||
|
||
- appium:unlockSuccessTimeout | ||
- appium:skipUnlock | ||
- appium:unlockType | ||
- appium:unlockKey | ||
|
||
These capabilities could be used to unlock the device under test during the driver session initialization | ||
as well as deal with different lock screen types. | ||
|
||
### appium:unlockSuccessTimeout | ||
|
||
Maximum number of milliseconds to wait until the device is unlocked. `2000` ms by default | ||
|
||
### appium:skipUnlock | ||
|
||
The `appium:skipUnlock` capability is enabled by default and makes the driver to detect and handle the lock screen | ||
upon session startup _if it is present_. If the lock screen cannot be detected upon session startup then nothing will be | ||
done. By default, it is assumed the device has a "simple" lock screen, which could be removed by waking up the device. | ||
In case the device has a different type of the lock screen configured in its settings then the information about it | ||
must be provided in the below capability values. | ||
|
||
### appium:unlockType and appium:unlockKey | ||
|
||
This capability supports the following possible values: | ||
|
||
#### pin | ||
|
||
Assumes the device is protected with a PIN code. Expects the `appium:unlockKey` to contain a valid pin consisting | ||
of digits in range 0-9, for example `1111`. | ||
|
||
#### password | ||
|
||
Assumes the device is protected with a password. Expects the `appium:unlockKey` to contain a valid password consisting | ||
of latin characters, for example `abcd1234`. | ||
|
||
#### pattern | ||
|
||
Assumes the device is protected with a secret pattern. Check the example below for more details on the `appium:unlockKey` | ||
value for this particular unlock type. | ||
|
||
##### Example | ||
|
||
Let say you have a device that is locked with a pattern similar to the one on the image below, | ||
and you want to run a test over that device. | ||
|
||
<img src="./screen1.png" /> | ||
|
||
We treat the pattern pins similarly to numbers on a digital phone dial. So, in this case the *unlockKey* is `729854163` | ||
|
||
<img src="./screen2.png" /> | ||
|
||
and capabilities are: | ||
|
||
```json | ||
{ | ||
"appium:unlockType": "pattern", | ||
"appium:unlockKey": "729854163" | ||
} | ||
``` | ||
|
||
## Mid-Session Unlock | ||
|
||
There is also a possibility to interact with the device's lock screen while the test session is running. | ||
Use the following mobile extensions for this purpose: | ||
|
||
- [mobile: lock](../../README.md#mobile-lock) | ||
- [mobile: unlock](../../README.md#mobile-unlock) | ||
- [mobile: isLocked](../../README.md#mobile-islocked) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
/** | ||
* @this {import('../driver').EspressoDriver} | ||
* @param {import('@appium/types').StringRecord[]} actions | ||
* @returns {Promise<void>} | ||
*/ | ||
export async function performActions(actions) { | ||
this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`); | ||
// This is needed because Selenium API uses MOUSE as the default pointer type | ||
const preprocessedActions = actions.map((action) => | ||
Object.assign( | ||
{}, | ||
action, | ||
action.type === 'pointer' ? {parameters: {pointerType: 'touch'}} : {} | ||
) | ||
); | ||
this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`); | ||
await this.espresso.jwproxy.command('/actions', 'POST', {actions: preprocessedActions}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters