appium / appium-android-driver Goto Github PK
View Code? Open in Web Editor NEWCommon methods collection used by Android drivers
License: Apache License 2.0
Common methods collection used by Android drivers
License: Apache License 2.0
When executing POST /wd/hub/session/<session_id>/touch/flick
with payload:
{
"element": "25",
"xoffset": 0,
"yoffset": -100,
"speed": 100
}
... the command that is ran under the hood is the following (according to the logs):
{
"cmd": "action",
"action": "element:swipe",
"params": {
"startX": "25",
"endY": 0,
"steps": 6,
"elementId": 100
}
}
It looks like the payload arguments are not bound correctly to the command arguments, leading to a 500. See the full log below:
[HTTP] --> POST /wd/hub/session/ca72033a-5e56-444a-bf97-60507b7aaefb/touch/flick {"element":"25","xoffset":0,"yoffset":-100,"speed":100}
[MJSONWP] Calling AppiumDriver.flick() with args: ["25",null,null,0,-100,100,"ca72033a-5e56-444a-bf97-60507b7aaefb"]
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"element:swipe","params":{"startX":"25","endY":0,"steps":6,"elementId":100}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"element:swipe","params":{"startX":"25","endY":0,"steps":6,"elementId":100}}
[debug] [AndroidBootstrap] Received command result from bootstrap
[HTTP] <-- POST /wd/hub/session/ca72033a-5e56-444a-bf97-60507b7aaefb/touch/flick 500 3 ms - 154
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: swipe
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Command returned error:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":13,"value":"Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference"}
appium-android-driver is failing to set mobile data on API23.
adb -s emulator-5554 shell am start -n io.appium.settings/.Settings -e data off
adb -s emulator-5554 shell settings get global mobile_data // --> 1 (should be 0)
I've tested the following commands on API23 with success:
shell svc data enable
shell settings get global mobile_data // --> 1
shell svc data disable
shell settings get global mobile_data // --> 0
This will require testing against all supported API levels.
After turning airplane_mode on, broadcasting airplane mode often hangs.
adb -s {DEVICE} shell settings put global airplane_mode_on 1
adb -s {DEVICE} shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
The command results in:
Broadcasting: Intent { act=android.intent.action.AIRPLANE_MODE (has extras) }
Broadcast completed: result=0
*hang*
adb logcat
output:
09-08 11:55:22.054 3259 3259 D AndroidRuntime: Calling main entry com.android.commands.am.Am
09-08 11:55:22.064 1525 1525 W Settings: Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.
09-08 11:55:22.083 1283 1324 D ConnectivityService: NetworkAgentInfo [MOBILE (UMTS) - 101] EVENT_NETWORK_INFO_CHANGED, going from CONNECTED to DISCONNECTED
09-08 11:55:22.083 1283 1324 D ConnectivityService: NetworkAgentInfo [MOBILE (UMTS) - 101] got DISCONNECTED, was satisfying 2
09-08 11:55:22.097 1525 1664 D DcNetworkAgent: NetworkAgent: NetworkAgent channel lost
09-08 11:55:22.097 1525 1664 D DcNetworkAgent: NetworkAgent: DcNetworkAgent: unwanted found mNetworkAgent=null, which isn't me. Aborting unwanted
09-08 11:55:22.100 1283 1324 D ConnectivityService: notifyType LOST for NetworkAgentInfo [MOBILE (UMTS) - 101]
09-08 11:55:22.104 1347 1721 D ConnectivityManager.CallbackHandler: CM callback handler got msg 524292
The device updates, showing the airplane icon but any additional ADB command hangs.
Turning airplane_mode off works fine.
Testing on Android 6.0 - API Level 23
The mobileInjectEmulatorCameraImage
is very useful, thank you.
Would it be possible to add position
parameter, along with the payload
that would allow setting the position of the injected image?
I opened inspector and saw that the UI hierarchy didn't include the elements that were off screen.
I scrolled down and saw the elements that are now above the screen can't be found by Appium.
https://gist.github.com/midopa/3dbe49785caee71bd7b10f22b2f7bf81
When I try to set a mock location on an emulator (Nexus_5_API_22) the appium settings is killed and I get the following info in the emulator log:
06-10 13:17:03.080: E/AndroidRuntime(7966): FATAL EXCEPTION: main
06-10 13:17:03.080: E/AndroidRuntime(7966): Process: io.appium.settings, PID: 7966
06-10 13:17:03.080: E/AndroidRuntime(7966): java.lang.RuntimeException: Unable to start service io.appium.settings.LocationService@21c91729 with Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=io.appium.settings/.LocationService (has extras) }: java.lang.SecurityException: Requires ACCESS_MOCK_LOCATION secure setting
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2911)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.app.ActivityThread.access$2100(ActivityThread.java:151)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1401)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.os.Handler.dispatchMessage(Handler.java:102)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.os.Looper.loop(Looper.java:135)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.app.ActivityThread.main(ActivityThread.java:5254)
06-10 13:17:03.080: E/AndroidRuntime(7966): at java.lang.reflect.Method.invoke(Native Method)
06-10 13:17:03.080: E/AndroidRuntime(7966): at java.lang.reflect.Method.invoke(Method.java:372)
06-10 13:17:03.080: E/AndroidRuntime(7966): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
06-10 13:17:03.080: E/AndroidRuntime(7966): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-10 13:17:03.080: E/AndroidRuntime(7966): Caused by: java.lang.SecurityException: Requires ACCESS_MOCK_LOCATION secure setting
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.os.Parcel.readException(Parcel.java:1546)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.os.Parcel.readException(Parcel.java:1499)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.location.ILocationManager$Stub$Proxy.addTestProvider(ILocationManager.java:1054)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.location.LocationManager.addTestProvider(LocationManager.java:1216)
06-10 13:17:03.080: E/AndroidRuntime(7966): at io.appium.settings.MockLocationProvider.pushLocation(MockLocationProvider.java:20)
06-10 13:17:03.080: E/AndroidRuntime(7966): at io.appium.settings.LocationService.onStartCommand(LocationService.java:25)
06-10 13:17:03.080: E/AndroidRuntime(7966): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2894)
06-10 13:17:03.080: E/AndroidRuntime(7966): ... 9 more
I'm running appium 1.5.3 on MacOSX 10.11.5
any hints?
"Rethink the gesture API in light of spec changes. Cancel might not even be there."
commands.doTouchAction = async function (action, opts) {
...
case 'cancel':
// TODO: clarify behavior of 'cancel' action and fix this
log.warn("Cancel action currently has no effect");
break;
...
(Just an idea note for me.)
Then, the launching status check can be skipped. I mean appium just calls the below, then returns true without the app status check.
I got a couple of reports about app termination status check.
After stopping the app process by force-stop command, the app process actually stopped, but the Android OS restarted the app process immediately (maybe the app was a service to keep running?). The app state check handled such case as still running.
I'll create a proposal later
driver.activate_app turns on auto rotation.
https://stackoverflow.com/questions/56684778/adb-shell-monkey-command-changing-device-orientation-lock
Hi,I am facing issues to select date from the datepicker with Appium for Android Driver.Please check the attached screenshots of the Calender I am looking for.
I have already tried with element.clear() followed by element.sendkeys("text"),but its not working.
Also I tried to work with Scroll to followed by TouchAction ,where its working till selecting the Year ,but after that its failed to select the date and month which should be selected from the screenshot named as DatePicker2.
The spec says we should be returning the location. If it is not possible in our new scheme to find the actual location, we should, if there is no error in setting, return the location that was requested.
Hi! I've encountered with such error:
Sun, 17 Oct 2021 18:03:07 GMT [debug] [WD Proxy] Matched '/wd/hub/session/7c1249a8-335f-406f-b896-4de763450808/elements' to command name 'findElements'
Sun, 17 Oct 2021 18:03:08 GMT [debug] [WD Proxy] Proxying [POST /wd/hub/session/7c1249a8-335f-406f-b896-4de763450808/elements] to [POST http://127.0.0.1:8000/wd/hub/session/11e8cf5c008df135834898f574187b26/elements] with body: {"using":"xpath","value":"//ion-toolbar/following::*[text() = 'Settings']"}
Sun, 17 Oct 2021 18:03:08 GMT [debug] [WD Proxy] Got response with status 200: {"value":[{"element-6066-11e4-a52e-4f735466cecf":"73f5694e-4214-4b04-b644-d6e1f355ec40"}]}
Sun, 17 Oct 2021 18:03:08 GMT [HTTP] <-- POST /wd/hub/session/7c1249a8-335f-406f-b896-4de763450808/elements 200 56 ms - 139
[HTTP]
[HTTP] --> POST /wd/hub/session/7c1249a8-335f-406f-b896-4de763450808/touch/multi/perform
[HTTP] {"actions":[{"action":"press","options":{"element":{"sessionId":"7c1249a8-335f-406f-b896-4de763450808","elementId":"73f5694e-4214-4b04-b644-d6e1f355ec40","element-6066-11e4-a52e-4f735466cecf":"73f5694e-4214-4b04-b644-d6e1f355ec40","selector":"//ion-toolbar/following::*[text() = 'Settings']","parent":{"sessionId":"7c1249a8-335f-406f-b896-4de763450808","capabilities":{"platform":"LINUX","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"warnings":{},"desired":{"platformName":"Android","deviceName":"Android Emulator","app":"C:\\Workspaces\\_IDL\\mobile-repo\\android\\app\\build\\outputs\\apk\\debug\\app-debug.apk","autoWebview":true,"appPackage":"com.indifferentlanguages.mobile","appActivity":".MainActivity","automationName":"UiAutomator2","udid":"emulator-5554","fullReset":false,"noReset":true,"dontStopAppOnReset":true},"platformName":"Android","deviceName":"emulator-5554","app":"C:\\Workspaces\\_ID...
Sun, 17 Oct 2021 18:03:08 GMT [debug] [W3C (7c1249a8)] Calling AppiumDriver.performMultiAction() with args: [[{"action":"press","options":{"element":{"sessionId":"7c1249a8-335f-406f-b896-4de763450808","elementId":"73f5694e-4214-4b04-b644-d6e1f355ec40","element-6066-11e4-a52e-4f735466cecf":"73f5694e-4214-4b04-b644-d6e1f355ec40","selector":"//ion-toolbar/following::*[text() = 'Settings']","parent":{"sessionId":"7c1249a8-335f-406f-b896-4de763450808","capabilities":{"platform":"LINUX","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"warnings":{},"desired":{"platformName":"Android","deviceName":"Android Emulator","app":"C:\\Workspaces\\_IDL\\mobile-repo\\android\\app\\build\\outputs\\apk\\debug\\app-debug.apk","autoWebview":true,"appPackage":"com.indifferentlanguages.mobile","appActivity":".MainActivity","automationName":"UiAutomator2","udid":"emulator-5554","fullReset":false,"noReset":true,"dontStopAppOnReset":true},"platformName":"Android","deviceName":"emulator-5554","app":"C:\\Workspaces\\_IDL\\mobile-...
Sun, 17 Oct 2021 18:03:08 GMT [debug] [W3C (7c1249a8)] Encountered internal error running command: TypeError: Cannot read property 'action' of undefined
Sun, 17 Oct 2021 18:03:08 GMT [debug] [W3C (7c1249a8)] at AndroidUiautomator2Driver.parseTouch (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\appium-android-driver\lib\commands\touch.js:246:4)
[debug] [W3C (7c1249a8)] at mapper (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\appium-android-driver\lib\commands\touch.js:334:1)
[debug] [W3C (7c1249a8)] at asyncmap (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\asyncbox\lib\asyncbox.js:104:24)
[debug] [W3C (7c1249a8)] at AndroidUiautomator2Driver.performMultiAction (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\appium-android-driver\lib\commands\touch.js:334:1)
[debug] [W3C (7c1249a8)] at commandExecutor (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\appium-base-driver\lib\basedriver\driver.js:335:9)
Sun, 17 Oct 2021 18:03:08 GMT [debug] [W3C (7c1249a8)] at C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\async-lock\lib\index.js:146:12
[debug] [W3C (7c1249a8)] at AsyncLock._promiseTry (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\async-lock\lib\index.js:280:31)
[debug] [W3C (7c1249a8)] at exec (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\async-lock\lib\index.js:145:9)
[debug] [W3C (7c1249a8)] at AsyncLock.acquire (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\async-lock\lib\index.js:162:3)
[debug] [W3C (7c1249a8)] at AndroidUiautomator2Driver.executeCommand (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\appium-base-driver\lib\basedriver\driver.js:348:39)
Sun, 17 Oct 2021 18:03:08 GMT [debug] [W3C (7c1249a8)] at AppiumDriver.executeCommand (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\lib\appium.js:563:36)
[debug] [W3C (7c1249a8)] at runMicrotasks (<anonymous>)
[debug] [W3C (7c1249a8)] at processTicksAndRejections (internal/process/task_queues.js:93:5)
[debug] [W3C (7c1249a8)] at asyncHandler (C:\Workspaces\_IDL\mobile-repo\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:297:21)
Sun, 17 Oct 2021 18:03:08 GMT [HTTP] <-- POST /wd/hub/session/7c1249a8-335f-406f-b896-4de763450808/touch/multi/perform 500 99 ms - 633
[HTTP]
[HTTP] --> DELETE /wd/hub/session/7c1249a8-335f-406f-b896-4de763450808
[HTTP] {}
[debug] [W3C (7c1249a8)] Calling AppiumDriver.deleteSession() with args: ["7c1249a8-335f-406f-b896-4de763450808"]
Here code which produces the error:
async longClickElement(selector: string): Promise<wdio.Element<'async'> | false> {
const element = await this.client.$(selector);
await element.waitForExist();
this.client.multiTouchPerform([{ action: 'press', options: { element } },
{ action: 'wait', options: { ms: 1100 } }]);
return element;
}
I did research and found a mistake (as I understand). But I don't know how to fix it.
There is single action passed to parseTouch
appium-android-driver/lib/commands/touch.js
Line 341 in 4bb5d76
But parseTouch function waits for array of actions
appium-android-driver/lib/commands/touch.js
Line 242 in 4bb5d76
and it fails on this line:
appium-android-driver/lib/commands/touch.js
Line 244 in 4bb5d76
[debug] [MJSONWP] Calling AppiumDriver.performMultiAction() with args: [[{"action":"press","options":{"x":100,"y":250}},{"action":"moveTo","options":{"x":300,"y":100}},{"action":"release"}],null,null,null,null,null,"cdb0e76b-e809-4ce5-a52e-1a83766464e0"]
[MJSONWP] Encountered internal error running command: TypeError: Cannot read property 'action' of undefined
at AndroidDriver.callee$0$0$ (../../../lib/commands/touch.js:198:32)
at tryCatch (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at invoke (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:37)
at enqueueResult (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:185:17)
at Promise.F (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\core-js\library\modules\$.export.js:30:36)
at AsyncIterator.enqueue (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:184:12)
at AsyncIterator.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at Object.runtime.async (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:209:12)
at AndroidDriver.callee$0$0 (../../../lib/commands/touch.js:271:21)
at AndroidDriver.callee$1$0$ (../../../lib/commands/touch.js:301:23)
at tryCatch (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at invoke (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:37)
at enqueueResult (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:185:17)
at Promise.F (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\core-js\library\modules\$.export.js:30:36)
at AsyncIterator.enqueue (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:184:12)
at AsyncIterator.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at Object.runtime.async (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:209:12)
at callee$1$0 (../../../lib/commands/touch.js:300:53)
at asyncmap$ (lib/asyncbox.js:75:24)
at tryCatch (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:294:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at invoke (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:136:37)
at enqueueResult (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:167:17)
at Promise.exp (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\core-js\library\modules\$.def.js:38:36)
at AsyncIterator.enqueue (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:166:12)
at AsyncIterator.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at Object.runtime.async (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\asyncbox\node_modules\babel-runtime\regenerator\runtime.js:192:12)
at asyncmap (lib/asyncbox.js:74:16)
at AndroidDriver.callee$0$0$ (../../../lib/commands/touch.js:300:22)
at tryCatch (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at invoke (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:37)
at enqueueResult (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:185:17)
at Promise.F (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\core-js\library\modules\$.export.js:30:36)
at AsyncIterator.enqueue (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:184:12)
at AsyncIterator.prototype.(anonymous function) [as next] (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21)
at Object.runtime.async (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:209:12)
at AndroidDriver.callee$0$0 [as performMultiAction] (../../../lib/commands/touch.js:300:13)
at ../../../lib/basedriver/driver.js:173:24
at tryCatcher (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\util.js:26:23)
at Promise._settlePromiseFromHandler (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\promise.js:510:31)
at Promise._settlePromiseAt (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\promise.js:584:18)
at Promise._settlePromiseAtPostResolution (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\promise.js:248:10)
at Async._drainQueue (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\async.js:128:12)
at Async._drainQueues (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\async.js:133:10)
at Immediate.Async.drainQueues (C:\Users\andrey.pshenkin\AppData\Roaming\npm\node_modules\appium\node_modules\bluebird\js\main\async.js:15:14)
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
[HTTP] <-- POST /wd/hub/session/cdb0e76b-e809-4ce5-a52e-1a83766464e0/touch/multi/perform 500 26 ms - 213
appium version: 1.6.1
Node version 6.9.1
A snippet of my log when running npm install on this project
> [email protected] install /Users/malugus/Code/appium-android-driver/node_modules/fsevents
> node-pre-gyp install --fallback-to-build
[fsevents] Success: "/Users/malugus/Code/appium-android-driver/node_modules/fsevents/lib/binding/Release/node-v47-darwin-x64/fse.node" is installed via remote
> [email protected] install /Users/malugus/Code/appium-android-driver/node_modules/ios-webview-app
> node -e "require('grunt').tasks(['default']);"
Running "cleanAll" task
Running "clean:iphonesimulator9.2" (clean) task
Running "clean:iphoneos9.2" (clean) task
Running "buildAll" task
Running "build:iphonesimulator9.2" (build) task
Building app...done building ios app for idk iphonesimulator9.2
Running "build:iphoneos9.2" (build) task
Building app...>> Failed building app
>> Build settings from command line:
>> SDKROOT = iphoneos9.2
>>
>> === BUILD TARGET WebViewApp OF PROJECT WebViewApp WITH THE DEFAULT CONFIGURATION (Release) ===
>>
>> Check dependencies
>> Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) were found.
>>
>> ** BUILD FAILED **
>>
>>
>> The following build commands failed:
>> Check dependencies
>> (1 failure)
Running "renameAll" task
> [email protected] install /Users/malugus/Code/appium-android-driver/node_modules/ios-uicatalog
> node -e "require('grunt').tasks(['default']);"
Running "cleanAll" task
Running "clean:iphonesimulator9.2" (clean) task
Running "clean:iphoneos9.2" (clean) task
Running "buildAll" task
Running "build:iphonesimulator9.2" (build) task
Building app...done building ios app for idk iphonesimulator9.2
Running "build:iphoneos9.2" (build) task
Building app...>> Failed building app
>> Build settings from command line:
>> SDKROOT = iphoneos9.2
>>
>> === BUILD TARGET UICatalog OF PROJECT UICatalog WITH THE DEFAULT CONFIGURATION (Release) ===
>>
>> Check dependencies
>> Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) were found.
>>
>> ** BUILD FAILED **
>>
>>
>> The following build commands failed:
>> Check dependencies
>> (1 failure)
Running "renameAll" task
> [email protected] install /Users/malugus/Code/appium-android-driver/node_modules/ios-test-app
> ./build-js/install.js
info iOSTestApp cleaning apps
dbug iOSTestApp cleaning app for iphonesimulator9.2
dbug iOSTestApp cleaning app for iphoneos9.2
info iOSTestApp finished cleaning apps
info iOSTestApp building apps
dbug iOSTestApp building app for iphonesimulator9.2
dbug iOSTestApp building app for iphoneos9.2
ERR! iOSTestApp Error: Command 'xcodebuild -sdk iphoneos9.2' exited with code 65
ERR! iOSTestApp at ChildProcess.<anonymous> (lib/teen_process.js:56:19)
ERR! iOSTestApp at emitTwo (events.js:100:13)
ERR! iOSTestApp at ChildProcess.emit (events.js:185:7)
ERR! iOSTestApp at maybeClose (internal/child_process.js:827:16)
ERR! iOSTestApp at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
ERR! iOSTestApp { [Error: Command 'xcodebuild -sdk iphoneos9.2' exited with code 65]
ERR! iOSTestApp stdout: 'Build settings from command line:\n SDKROOT = iphoneos9.2\n\n=== BUILD TARGET TestApp OF PROJECT TestApp WITH THE DEFAULT CONFIGURATION (Release) ===\n\nCheck dependencies\nCode Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) were found.\n\n',
ERR! iOSTestApp stderr: '** BUILD FAILED **\n\n\nThe following build commands failed:\n\tCheck dependencies\n(1 failure)\n',
ERR! iOSTestApp code: 65 }
info iOSTestApp finished building apps
info iOSTestApp renaming apps
WARN iOSTestApp could not rename apps
ERR! iOSTestApp Error: ENOENT: no such file or directory, rename '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp.app' -> '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp-iphoneos.app'
ERR! iOSTestApp at Error (native)
ERR! iOSTestApp { [Error: ENOENT: no such file or directory, rename '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp.app' -> '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp-iphoneos.app']
ERR! iOSTestApp cause:
ERR! iOSTestApp { [Error: ENOENT: no such file or directory, rename '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp.app' -> '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp-iphoneos.app']
ERR! iOSTestApp errno: -2,
ERR! iOSTestApp code: 'ENOENT',
ERR! iOSTestApp syscall: 'rename',
ERR! iOSTestApp path: '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp.app',
ERR! iOSTestApp dest: '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp-iphoneos.app' },
ERR! iOSTestApp isOperational: true,
ERR! iOSTestApp errno: -2,
ERR! iOSTestApp code: 'ENOENT',
ERR! iOSTestApp syscall: 'rename',
ERR! iOSTestApp path: '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp.app',
ERR! iOSTestApp dest: '/Users/malugus/Code/appium-android-driver/node_modules/ios-test-app/build/Release-iphoneos/TestApp-iphoneos.app' }
> [email protected] install /Users/malugus/Code/appium-android-driver/node_modules/appium-chromedriver
> node install-npm.js
Mobile data isn't turning off on the device. The issue appears to be with io.appium.settings:
// WiFi sets correctly:
adb shell am start -n io.appium.settings/.Settings -e wifi on
adb shell settings get global wifi_on
-> 1
adb shell am start -n io.appium.settings/.Settings -e wifi off
adb shell settings get global wifi_on
-> 0
// However, data doesn't set correctly:
adb shell am start -n io.appium.settings/.Settings -e data on
adb shell settings get global mobile_data
-> 1
adb shell am start -n io.appium.settings/.Settings -e data off
adb shell settings get global mobile_data
-> 1 (Should be 0)
As a side note, when adb shell am start -n io.appium.settings/.Settings -e wifi on
is executed, the settings application kicks off and says it's setting WiFi on, however the wifi toggle on the android device remains set to 'off'.
Testing on Android 6.0 - API Level 23
I am looking at #83. By examining the date and tags on the associated commit I can make a fair guess about the Appium version this commit is in. But is there a command to achieve the same? I tried git branch -a -contains 6a048ef386aae3b2200648a16c7922dcd7d42cb3
but that doesn't help get Appium version numbers. Any idea?
When the appActivity
and appPackage
capabilities are used instead of app
, noReset
and fullReset
are ignored. This is due to the reset logic being contained in function installApkRemotely, which is not called when not using the app
capability.
In the following example, the app data remains on the phone instead of being erased.
#!/usr/bin/env python3
import appium
import time
capabilities = {
'appActivity': "com.ansca.corona.CoronaActivity",
'appPackage': "br.com.tapps.vloggergoviral",
'deviceName': "Android",
'platformName': "Android",
'noReset': False
}
webdriver = appium.webdriver.Remote("http://localhost:4723/wd/hub", capabilities)
time.sleep(15)
webdriver.quit()
Expected behavior: app is reset when noReset
= false and an error is raised then fullReset
= true and no app
capability is provided.
I will create a pull request for this soon.
After git clone
and run npm run watch
, I don't know why, need help
λ npm run watch
> [email protected] watch C:\Project\x5-driver\build\hook\appium-android-driver
> gulp
[16:25:38] Using gulpfile C:\Project\x5-driver\build\hook\appium-android-driver\gulpfile.js
[16:25:38] Starting 'watch'...
[16:25:38] Finished 'watch' after 5.33 ms
[16:25:38] Starting 'default'...
[16:25:38] Finished 'default' after 5.42 μs
Error: spawn C:\Project\x5-driver\build\hook\appium-android-driver\node_modules\.bin\gulp ENOENT
at exports._errnoException (util.js:855:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
at onErrorNT (internal/child_process.js:344:16)
at nextTickCallbackWith2Args (node.js:455:9)
at process._tickCallback (node.js:369:17)
at Function.Module.runMain (module.js:432:11)
at startup (node.js:141:18)
at node.js:980:3
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Software\\nodejs\\node.exe" "C:\\Users\\tianyuzou\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "watch"
npm ERR! node v5.3.0
npm ERR! npm v3.5.2
npm ERR! code ELIFECYCLE
npm ERR! [email protected] watch: `gulp`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] watch script 'gulp'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the appium-android-driver package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! gulp
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs appium-android-driver
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls appium-android-driver
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! C:\Project\x5-driver\build\hook\appium-android-driver\npm-debug.log
On hybrid apps, visible checkboxes on the screen have negative x-axis values for center and location. X-value for size is very large as well.
element.getCenter(); // (-1356, 1296)
element.getLocation(); // (-3433, 1232)
element.getSize(); // (4154, 129)
appium.manage().window().getSize(); // (1440, 2560)
Interestingly, in Inspector, the location and size values seem OK:
type: android.widget.CheckBox
text:
index: 4
enabled: true
location: {0, 1232}
size: {721, 129}
When I view the page source directly from Appium, I see the checkboxes have valid-looking values for their bound
property.
https://gist.github.com/midopa/ba91923519a6b288a1cd510690c2a2b8
Warning:
Android 11 (API 30) dumpsys meminfo adds "Rss Total" column before "Heap Size"
I wrote a test script to measure long run capability of Appium.
However after a few sessions, the appium stub at create new session
[debug] [JSONWP Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.android.chrome","androidDeviceSerial":"988633304d4b323634"}}}
I used 'adb' to check "chrome" process on device and see that many chrome processes are leaking
./adb shell ps | grep chrome
u0_a85 2757 3184 1578696 194580 SyS_epoll_ 0000000000 S com.android.chrome
u0_i39 2804 3184 1201756 86092 SyS_epoll_ 0000000000 S com.android.chrome:sandboxed_process0
u0_a85 2836 3184 1212104 93312 SyS_epoll_ 0000000000 S com.android.chrome:privileged_process0
u0_a86 10842 3183 1664788 59756 SyS_epoll_ 0000000000 S com.sec.android.app.chromecustomizations
u0_a85 30465 3184 1548556 182592 SyS_epoll_ 0000000000 S com.android.chrome
u0_a85 30671 3184 1234504 89732 SyS_epoll_ 0000000000 S com.android.chrome
Because my device is non-root so I cannot kill "chrome" process by 'shell pkill' or 'am force-stop com.android.chrome'.
Now my device cannot work with appium any more until restarting to clean up leaking processes
Environment:
Appium: 1.6.1/1.6.2
Chromedriver: 2.25
Nodejs: v6.8.0
NPM: 3.10.8
Device:
Galaxy S7: SM-G930F
Android: 6.0.1
Chrome: 54.0.2840.85
Start commands:
Appium
node build/lib/main.js --command-timeout "7200" --debug-log-spacing --default-capabilities '{"platformName":"Android"}' --default-device
Client
UDID=988633304d4b323634 PLATFORM=Android npm run wd
Appium's log: https://gist.github.com/nghiadhd/88c8bf0e14ac32f2f47f3e3052d2ddfa
Testscript: https://gist.github.com/nghiadhd/8388fe2b2e9e1917298e0b9d4d52d952
[email protected]
Issue devices:
Other devices still work well
Note: In the past, the Galaxy S4 still works well, but after upgrade to newer OS version, it doesn't work any more
Issue: "Encountered internal error running command: Error: Screen did not unlock successfully"
Expectation: The screen should be unlocked
After do some investigating, found that the adb command to start the unlock doesn't work
adb with args: ["-P",5037,"-s","xxxxxxxxxx","shell","am","start","-n","io.appium.unlock/.Unlock","-S","-a","android.intent.action.MAIN","-c","android.intent.category.LAUNCHER","-f","0x10200000"]
I can reproduce the issue by adb command
adb -s shell am start -n 'io.appium.unlock/.Unlock' -S -a 'android.intent.action.MAIN' -c 'android.intent.category.LAUNCHER' -f '0x10200000'
Some addresses
The '-S' option doesn't work (should be remove from command)
If the unlock is on foreground, the command doesn't make effect
My solution, use 'adb shell am force-stop' to kill 'unlock' and 'adb shell am start' to restart 'unlock' app. I tested on issue devices and confirm it works well
adb -s <UDID> shell am force-stop 'io.appium.unlock
adb -s <UDID> shell am start -n 'io.appium.unlock/.Unlock' -a 'android.intent.action.MAIN' -c 'android.intent.category.LAUNCHER' -f '0x10200000'
adb -s <UDID> shell am start -n 'io.appium.unlock/.Unlock' -a 'android.intent.action.MAIN' -c 'android.intent.category.LAUNCHER' -f '0x10200000'
Weird that after force-stop, we should call 'am start' 2 times to invoke the 'unlock' app. That's should be the reason why '-S' option doesn't work
When I launch tests that use Chrome on multiple devices at the same time, all but one fails. This is because all the ChromeDriver sessions are trying to start on the same port, 9515.
I suggest that Appium uses the first available random port found for each ChromeDriver session. This will enable parallel Android browser tests on the same machine with no extra effort from users' POV.
I am trying to figure out how to run E2E/functional tests, can someone point me at right direction?
gulp once - only ran unit tests
gulp e2eTest didn't work
I made partial progress by first
gulp transpile
and the mocha build/path/to/testfile
but it failed with lack of correct timeout
1) Find - basic "before all" hook: callee$1$0:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
🚨 You need to enable Continuous Integration on Greenkeeper branches of this repository. 🚨
To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.
Since we didn’t receive a CI status on the greenkeeper/initial
branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.
If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/
.
Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please click the 'fix repo' button on account.greenkeeper.io.
Hi all! I have one more request for a fix on touch actions.
For some specific tests I'd like to be able to start a drag action and then zoom in the screen (start with a single finger and later touch another finger). The following Python code exemplifies my desired behavior:
#!/usr/bin/env python3
import appium
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
capabilities = {
'appActivity': "<activity>",
'appPackage': "<package>",
'deviceName': "Android",
'platformName': "Android",
'noReset': False
}
webdriver = appium.webdriver.Remote("http://localhost:4723/wd/hub", capabilities)
try:
contact_1 = TouchAction(webdriver).press(x=14, y=14).wait(5).move_to(x=5, y=-5).release()
contact_2 = TouchAction(webdriver).wait(5).press(x=24, y=24).wait(5).move_to(x=0, y=4).release()
multi_touch = MultiAction(webdriver)
multi_touch.add(contact_1)
multi_touch.add(contact_2)
multi_touch.perform()
finally:
webdriver.quit()
However, Appium crashes when the touch action doesn't start with a press checking the yet undefined x/y coordinates. In the example above, it crashes on the second contact, which starts with wait.
Here, relevant parts:
[HTTP] --> POST /wd/hub/session/52783d80-5081-4bcc-8c45-4b8ca858a159/touch/multi/perform {"sessionId":"52783d80-5081-4bcc-8c45-4b8ca858a159","actions":[[{"action":"press","options":{"x":14,"y":14}},{"action":"moveTo","options":{"x":5,"y":-5}},{"action":"release","options":{}}],[{"action":"wait","options":{"ms":5}},{"action":"press","options":{"x":24,"y":24}},{"action":"moveTo","options":{"x":0,"y":4}},{"action":"release","options":{}}]]}
[MJSONWP] Calling AppiumDriver.performMultiAction() with args: [[[{"action":"press","optio...
[MJSONWP] Encountered internal error running command: TypeError: Cannot read property 'x' of null
at AndroidDriver.callee$0$0$ (lib/commands/touch.js:258:32)
at tryCatch (/home/tiago/code/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (/home/tiago/code/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/home/tiago/code/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
at GeneratorFunctionPrototype.invoke (/home/tiago/code/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
Given above.
Could some of you provide a fix? I might try to get a PR done if you guys are busy with other issues.
Thanks!
The previous implementation of toggleSetting had a 2000ms delay before calling adb.keyevent().
adb.keyevent() seems to work without this delay (tested on 6.0/23). toggleSettings calls adb.keyevent() numerous times. Removing the delay could save ~10 seconds.
We should test all API versions to see if it's required.
https://github.com/appium/appium-android-driver/blob/master/lib/commands/network.js#L159-L163
Update: abd.keyevent() is being replaced with bootstrap.sendAction(“keyPressCode").
Find an AdmZip alternative to zip files in the commands.pullFolder method.
commands.pullFolder = async function (remotePath) {
let localFolder = temp.path({prefix: 'appium'});
await this.adb.pull(remotePath, localFolder);
// TODO: find a better alternative to the AdmZip module
let zip = new AdmZip();
zip.addLocalFolder(localFolder);
return new Promise((resolve, reject) => {
zip.toBuffer((buffer) => {
logger.debug("Converting in-memory zip file to base64 encoded string");
resolve(buffer.toString('base64'));
}, (err) => {
reject(err);
});
});
};
Hi, thanks for your great work.
I cloned v7.1.4 yesterday, but it couldn't work with npm i
It takes me half a day to fix it like your fix in v7.1.5
.
The root cause is the different versions of @appium/types
exist after npm i
. The dependencies I got are different from those in the v7.1.4
ci.
So, I'm proposing to add package-lock.json back to avoid similar issues in the future. Because it could also happen for other libs.
In this way, we can ensure if the released version passes ci, then it should also work after other developers clone it to the local.
What do you think?
I've come across an odd issue that I can't fully explain with this. Running automation tests via robot framework using pip modules/packages listed in Environment section below.
Recently upgraded the test machines for Fedora 39 and updated all automation tools to latest.
Afterwards we started seeing regular failures (not always but almost always) on units just after a browser webview app separate (but related) to our main webview app had been closed. Our main app launches the browser app (a separate apk), which opens its own webview, while the main app stays open/active/alive in the background. The browser was being tested using native context and the tests were attempting to switch back to the chrome webview context of the main app.
The tests were failing with a "NoSuchContextException: Message: No such context found" error. This can be see in the attached appium log at 2023-12-01 20:00:48:243. The reason that the main app's webview is not listed is given in the attached appium log as being due to the fact that it reported having zero pages.
(note the provided log is from a test run where the empty browser webview is present at the start of the tests so the failure comes sooner and the logs are shorter)
However I ran a script in parallel to the appium tests and the webview for the main app is not empty at the time of the failure nor is it ever populated as empty (following is from querying the webview info in the same way as https://github.com/appium/appium-android-driver/blob/master/lib/helpers/webview.ts#L351 and using the same adb executable as appium does).
INFO FOR WEBVIEW webview_devtools_remote_4867
{ "Android-Package": "com.mycompany.ourmainapp", "Browser": "Chrome/119.0.6045.163", "Protocol-Version": "1.3", "User-Agent": "Mozilla/5.0 (Linux; Android 7.1.2; p212 Build/NHG47L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/119.0.6045.163 Safari/537.36", "V8-Version": "11.9.169.6", "WebKit-Version": "537.36 (@e87d8ea31f029f62cebd71af35a9059e00c18d1e)", "webSocketDebuggerUrl": "ws://127.0.0.1:12345/devtools/browser" }
[ { "description": "{\"attached\":true,\"empty\":false,\"height\":1080,\"never_attached\":false,\"screenX\":0,\"screenY\":0,\"visible\":true,\"width\":1920}", "devtoolsFrontendUrl": "https://chrome-devtools-frontend.appspot.com/serve_rev/@e87d8ea31f029f62cebd71af35a9059e00c18d1e/inspector.html?ws=127.0.0.1:12345/devtools/page/A695EA9671A465380E4CA97C3B286ADC", "faviconUrl": "https://localhost/favicon.ico", "id": "A695EA9671A465380E4CA97C3B286ADC", "title": "ourmainapp", "type": "page", "url": "https://localhost/index.html/", "webSocketDebuggerUrl": "ws://127.0.0.1:12345/devtools/page/A695EA9671A465380E4CA97C3B286ADC" } ]
INFO FOR WEBVIEW webview_devtools_remote_5807
{ "Android-Package": "com.mycompany.browser", "Browser": "Chrome/119.0.6045.163", "Protocol-Version": "1.3", "User-Agent": "Mozilla/5.0 (Linux; Android 7.1.2; p212 Build/NHG47L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/119.0.6045.163 Safari/537.36", "V8-Version": "11.9.169.6", "WebKit-Version": "537.36 (@e87d8ea31f029f62cebd71af35a9059e00c18d1e)", "webSocketDebuggerUrl": "ws://127.0.0.1:12345/devtools/browser" }
[ ]
The browser app's webview is indeed empty at this time though and it appears as though the presence of this empty browser webview is somehow affecting the interpretation of the main app's webview page info. Since querying the webview info directly using the same methodology and same adb executable as Appium clearly shows that the main app's webview is not empty, I am unsure as to where this is going wrong internally to the Android driver but that seems to be the case.
The above logs are from an Android 7 STB (with Chrome 119 webview) but we also see exactly the same issue on an Android 11 terminal device running same webview. Downgrading to 117 webview didn't help.
To further muddy the waters, I cannot reproduce this issue on another machine running Fedora 38. As far as I can ascertain, it has all the same environment as below with the obvious exception of the OS (Fedora 38 instead of 39) and python (v3.11.6 instead of v3.12.0). It never gives this issue when running the same tests against the same devices.
Environment is as follows:
os name: NAME="Fedora Linux"
os version: VERSION="39 (Workstation Edition)"
appium: 2.2.2
appium-doctor: 2.0.28
appium driver:
✔ Listing installed drivers
(pip modules/packages)
Appium-Python-Client 3.1.0
robotframework 6.1.1
robotframework-appiumlibrary 2.0.0
robotframework-pythonlibcore 4.3.0
robotframework-seleniumlibrary 6.2.0
robotframework-sshlibrary 3.8.0
selenium 4.15.2
wheel 0.42.0
google-chrome: Google Chrome 119.0.6045.159
/usr/bin/chromedriver: ChromeDriver 119.0.6045.105 (38c72552c5e15ba9b3117c0967a0fd105072d7c6-refs/branch-heads/6045@{#1103})
/usr/local/bin/chromedriver: ChromeDriver 119.0.6045.105 (38c72552c5e15ba9b3117c0967a0fd105072d7c6-refs/branch-heads/6045@{#1103})
~/.appium/.../chromedriver/linux/: chromedriver-linux64_v119.0.6045.105
Python version v3.12.0
android sdk:
Installed packages:=====================] 100% Fetch remote repository...
Path | Version | Description | Location |
---|---|---|---|
build-tools;29.0.2 | 29.0.2 | Android SDK Build-Tools 29.0.2 | build-tools/29.0.2 |
build-tools;30.0.2 | 30.0.2 | Android SDK Build-Tools 30.0.2 | build-tools/30.0.2 |
build-tools;30.0.3 | 30.0.3 | Android SDK Build-Tools 30.0.3 | build-tools/30.0.3 |
build-tools;32.0.0 | 32.0.0 | Android SDK Build-Tools 32 | build-tools/32.0.0 |
build-tools;33.0.0 | 33.0.0 | Android SDK Build-Tools 33 | build-tools/33.0.0 |
build-tools;33.0.2 | 33.0.2 | Android SDK Build-Tools 33.0.2 | build-tools/33.0.2 |
cmake;3.18.1 | 3.18.1 | CMake 3.18.1 | cmake/3.18.1 |
cmake;3.22.1 | 3.22.1 | CMake 3.22.1 | cmake/3.22.1 |
emulator | 32.1.15 | Android Emulator | emulator |
ndk;21.0.6113669 | 21.0.6113669 | NDK (Side by side) 21.0.6113669 | ndk/21.0.6113669 |
patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4 |
platform-tools | 34.0.5 | Android SDK Platform-Tools | platform-tools |
platforms;android-29 | 5 | Android SDK Platform 29 | platforms/android-29 |
platforms;android-30 | 3 | Android SDK Platform 30 | platforms/android-30 |
platforms;android-31 | 1 | Android SDK Platform 31 | platforms/android-31 |
platforms;android-32 | 1 | Android SDK Platform 32 | platforms/android-32 |
platforms;android-33 | 3 | Android SDK Platform 33 | platforms/android-33 |
Warning:
These issues are not tracked. Please create new issues in the main Appium
repository: https://github.com/appium/appium/issues/new
npm ERR! code 1
npm ERR! path /usr/local/lib/node_modules/opencv4nodejs
npm ERR! command failed
npm ERR! command sh -c node ./install/install.js
npm ERR! info install using lib dir: /usr/local/lib/node_modules/opencv4nodejs/node_modules/opencv-build/opencv/build/lib
npm ERR! /usr/local/lib/node_modules/opencv4nodejs/install/install.js:37
npm ERR! throw new Error('library dir does not exist: ' + libDir)
npm ERR! ^
npm ERR!
npm ERR! Error: library dir does not exist: /usr/local/lib/node_modules/opencv4nodejs/node_modules/opencv-build/opencv/build/lib
npm ERR! at Object. (/usr/local/lib/node_modules/opencv4nodejs/install/install.js:37:9)
npm ERR! at Module._compile (node:internal/modules/cjs/loader:1092:14)
npm ERR! at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)
npm ERR! at Module.load (node:internal/modules/cjs/loader:972:32)
npm ERR! at Function.Module._load (node:internal/modules/cjs/loader:813:14)
npm ERR! at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
npm ERR! at node:internal/main/run_main_module:17:47
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/jitu-patel/.npm/_logs/2021-04-18T11_10_47_360Z-debug.log
Jitu-Patel:~ jitu-patel$ npm -g list
/usr/local/lib
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
Hybrid app based app using crosswalk web driver. Testing on real devices.
Works with appium 1.3.5 with crosswalk web driver.
Latest version 1.5.2 throws error.
Based on investigation
Latest version throws NoSuchContextError()
If the available contexts are only NATIVE_APP, CHROMIUM, I would expect the defaults to be chosen from one of them instead of WEBVIEW_{apppackage}.
v1.3.5 was exiting gracefully
return cb(null, {
status: status.codes.NoSuchContext.code
, value: "Context '" + name + "' does not exist"
});
code paths where it's called
this.defaultWebviewName called from initautowebview (lib/driver.js) - line no 202
The above line is based on appium server flags autowebview (true, false)
this.defaultWebviewName called from setcontext (lib/commands/context.js) - line no 39
function itself is present in context.js at line no 89
🚨 You need to enable Continuous Integration on all branches of this repository. 🚨
To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.
Since we didn’t receive a CI status on the greenkeeper/initial
branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.
If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/
.
Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please delete the greenkeeper/initial
branch in this repository, and then remove and re-add this repository to the Greenkeeper App’s white list on Github. You'll find this list on your repo or organization’s settings page, under Installed GitHub Apps.
When appium is working with Browser or IOS, it will open a browser (simulator) at the start of session and close it at the end.
I am going to make android behave the same way. For example we can read deviceName
and platformVersion
and create AVD name according to these parameters, launch AVD (it needs these avds to be predefined [or maybe create avd if it did not find it!!]), and close it at the end of session.
this way the behavior will be almost the same as other platforms. What do you think about it? any suggestions?
WebElement linearLayouts = driver.findElementByXPath("//android.widget.LinearLayout[@index='1']");
List<WebElement> views = linearLayouts.findElements(By.className("android.widget.TextView"));
System.out.println(views.size());
I would expect to only get back the 2 elements for the TextViews in the tree attached. Instead all the elements with that class in the document are returned?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.