Components versions used:
Appium java-client 3.2.0Appium server 1.4.16
Chrome driver 2.20
Emulator Android 6.0, API level 23 with Intel x86 image
Clear password field reliably
Sometimes, password fields are not cleared reliably. And you just end up with password appended to the prefilled one. It is because UIAutomator right now can not get password field value, and thus the automatic fallback which attempts to clear text field until its value is empty - fails.
What about having something like PasswordField widget, which would have clear method as follows:
public void clear() { passwordField.click(); for(int i = 0; i <; passwordValue.length(); i++) { driver.pressKeyCode(67); //BACKSPACE } }It should be enough to click to the middle of password field, when passwords are not too long.
Find element which just recently fade in
Sometimes, Appium was not able to find an element (e.g. android.widget.Button) which just recently fade in. It was not a timing issue. It was non-deterministic, made tests flaky and almost drove me nuts.
Calling driver.getPageSource(), before attempting to find such an element solved my problem.
Inspired from this Appium bug report.
Set date picker field more reliably
There are multiple tutorials how to set Date Picker on Android. They simply advice to call WebElement#sendKeys on day, month and year elements. Sometimes, it just fails to clear completely previous value, and results with wrong date set. Easy solution is to set new value multiple times:
WebElement picker = driver.findElement(PICKER_LOCATOR); int counter = 0; while((!picker.getText().equalsIgnoreCase(value)) && (counter < MAX_TRIES_TO_SET_VALUE)) { picker.clear(); picker.sendKeys(value); counter++; } if(counter >= MAX_TRIES_TO_SET_VALUE) { throw new IllegalStateException("It was not possible to set new value: " + value + " in Android picker after " + MAX_TRIES_TO_SET_VALUE + " tries."); } picker.click(); // confirm entered valueNormally this is not a good practice, and I am trying to avoid repeating doing something until successful, as it introduces false positive results. However, as far as this not a problem of our component, it is OK.
No comments:
Post a Comment