diff --git a/lib/unlock-helpers.js b/lib/unlock-helpers.js index e7d623c3..1a8abf06 100644 --- a/lib/unlock-helpers.js +++ b/lib/unlock-helpers.js @@ -1,6 +1,7 @@ import logger from './logger'; import { sleep } from 'asyncbox'; import _ from 'lodash'; +import { util } from 'appium-support'; const PIN_UNLOCK = "pin"; const PASSWORD_UNLOCK = "password"; @@ -97,27 +98,25 @@ helpers.pinUnlock = async function (adb, driver, capabilities) { throw new Error("Error finding unlock pin buttons!"); } let pins = {}; - for (let e of els) { - let text = await driver.getAttribute("text", e.ELEMENT); - pins[text] = e; + for (let el of els) { + let text = await driver.getAttribute("text", util.unwrapElement(el)); + pins[text] = el; } for (let pin of keys) { let el = pins[pin]; - await driver.click(el.ELEMENT); + await driver.click(util.unwrapElement(el)); } - let el = await driver.findElOrEls("id", "com.android.systemui:id/key_enter", false); - await driver.click(el.ELEMENT); } else { for (let pin of keys) { - let el = await driver.findElOrEls("id", `com.android.keyguard:id/key${pin}`, false); + let el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false); if (el === null) { throw new Error(`Error finding unlock pin '${pin}' button!`); } - await driver.click(el.ELEMENT); + await driver.click(util.unwrapElement(el)); } - let el = await driver.findElOrEls("id", "com.android.keyguard:id/key_enter", false); - await driver.click(el.ELEMENT); } + const el = await driver.findElOrEls('xpath', "//*[contains(@resource-id, 'id/key_enter')]", false); + await driver.click(util.unwrapElement(el)); // Waits a bit for the device to be unlocked await sleep(UNLOCK_WAIT_TIME); }; @@ -215,8 +214,8 @@ helpers.patternUnlock = async function (adb, driver, capabilities) { `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`, false ); - let initPos = await driver.getLocation(el.ELEMENT); - let size = await driver.getSize(el.ELEMENT); + let initPos = await driver.getLocation(util.unwrapElement(el)); + let size = await driver.getSize(util.unwrapElement(el)); // Get actions to perform let actions = helpers.getPatternActions(keys, initPos, size.width / 3); // Perform gesture diff --git a/package.json b/package.json index 9b46d577..1b769b23 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "appium-adb": "^6.19.0", "appium-base-driver": "^3.0.0", "appium-chromedriver": "^4.0.0", - "appium-support": "^2.13.0", + "appium-support": "^2.24.1", "asyncbox": "^2.0.4", "bluebird": "^3.4.7", "io.appium.settings": "^2.8.0", diff --git a/test/unit/unlock-helper-specs.js b/test/unit/unlock-helper-specs.js index 848bf536..f81cdf5c 100644 --- a/test/unit/unlock-helper-specs.js +++ b/test/unit/unlock-helper-specs.js @@ -166,7 +166,7 @@ describe('Unlock Helpers', function () { .withExactArgs("id", "com.android.systemui:id/digit_text", true) .returns(els); mocks.driver.expects('findElOrEls') - .withExactArgs("id", "com.android.systemui:id/key_enter", false) + .withExactArgs('xpath', "//*[contains(@resource-id, 'id/key_enter')]", false) .returns({ELEMENT: 100}); for (let e of els) { mocks.driver.expects('getAttribute').withExactArgs('text', e.ELEMENT) @@ -199,7 +199,7 @@ describe('Unlock Helpers', function () { .returns({ELEMENT: parseInt(pin, 10)}); } mocks.driver.expects('findElOrEls') - .withExactArgs("id", "com.android.keyguard:id/key_enter", false) + .withExactArgs('xpath', "//*[contains(@resource-id, 'id/key_enter')]", false) .returns({ELEMENT: 100}); mocks.asyncbox.expects('sleep').withExactArgs(UNLOCK_WAIT_TIME).once(); sandbox.stub(driver, 'click');