Coder Social home page Coder Social logo

sudharsan-selvaraj / appium-dashboard-plugin Goto Github PK

View Code? Open in Web Editor NEW
113.0 113.0 28.0 27.53 MB

Appium plugin that provides complete test logs, video recording of test and device logs(logcat and syslogs) for easy debugging.

JavaScript 9.82% TypeScript 89.11% HTML 0.49% CSS 0.54% Shell 0.04%
appium appium-android appium-framework appium-ios appium-plugin appium-server automation browserstack

appium-dashboard-plugin's Introduction

Hi ๐Ÿ‘‹, I'm Sudharsan

A passionate automation engineer from India

sudharsan-selvaraj

Connect with me:

sudhus_selvaraj sudharsan-selvaraj @sudharsanselvaraj.c testninja

sudharsan-selvaraj

Languages:

java javascript typescript

Frameworks and Tools:

android angularjs docker express firebase git html5 jasmine jenkins nodejs postgresql puppeteer selenium

sudharsan-selvaraj

appium-dashboard-plugin's People

Contributors

pramodkumaryadav avatar sbalaji1192 avatar sudharsan-selvaraj avatar zgrauer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

appium-dashboard-plugin's Issues

failed to create session: nativeWebScreenshot should not exist on primary and secondary

  1. caps
    {
    "appium:automationName": "Appium",
    "appium:orientation": "PORTRAIT",
    "platformName": "Android",
    "appium:platformVersion": "10",
    "appium:deviceName": "emulator-5554",
    "appium:appPackage": "ccom.android.vending",
    "appium:appActivity": "com.google.android.finsky.activities.MainActivity"
    }

node 14.19
I get the error in the title when running via the appium inspector

  1. if i run the same test via node with the same caps i get "enviroment unavailible unknown server side error, cannot read property firstMatch of undefined.
  2. If i kill appium server and run with no plugin the test works fine.

Update Readme for command-line arguments

The --use-plugin options don't work with [email protected] but appium --plugins appium-dashboard does

unmeshgundecha@Unmeshs-MacBook-Pro-2 pos % appium --version

2.0.0-beta.18
unmeshgundecha@Unmeshs-MacBook-Pro-2 pos % appium --use-plugin=appium-dashboard

usage: appium [-h] [-v] {server,driver,plugin} ...
appium: error: unrecognized arguments: --use-plugin=appium-dashboard

Installation Error - Encountered an error when installing package: Cannot read property 'trim' of undefined

pi@raspberrypi:~ $ appium --version
2.0.0-beta.25

pi@raspberrypi:~ $ sudo appium plugin install --source=npm appium-dashboard
Attempting to find and install plugin 'appium-dashboard'
โ ด Installing 'appium-dashboard'
โ ง Installing 'appium-dashboard'
โ  Installing 'appium-dashboard'
โœ– Installing 'appium-dashboard'
Error: Encountered an error when installing package: Cannot read property 'trim' of undefined

Save / Download video won't work

I can't find a way to save the videos as a file.

  • If I try clicking the three dot and "download" it will try to save it as json file. Renaming won't work, the save fails
  • If I try to open the video as another tab I get a blank page with {"success":false,"message":"Video not available"} written
  • If I try to inspect the html and open the react player link by hand it will do the same as above

Am I missing anything?
Versions:

Create unit and integration tests

Currently, there are no tests available to test the plugin. It would be good to add at least basic tests to cover any major regression.

In Appium dashboard, recordings are not available for the execution results

Hi Team,

In Appium dashboard, recordings are not available for the execution results. Is there any flag to enable recording?

In logs, I could find commands related to recording:

info HTTP {"options":{"videoType":"libx264","videoFps":10,"timeLimit":1800}} [debug] [AndroidUiautomator2Driver@653a (34498909)] Calling AppiumDriver.startRecordingScreen() with args: [{"videoType":"libx264","videoFps":10,"timeLimit":1800},"34498909-af63-4554-bed8-7e110442ba02"] info Appium Plugins which can handle cmd 'startRecordingScreen': appium-dashboard,device-farm info Appium Plugin device-farm is now handling cmd 'startRecordingScreen' [device-farm] Received startRecordingScreen request on driver - [object Object] info Appium Plugin appium-dashboard is now handling cmd 'startRecordingScreen' info Appium Executing default handling behavior for command 'startRecordingScreen' [debug] [ADB] Getting IDs of all 'screenrecord' processes [debug] [ADB] Running '/Users/hema/Library/Android/sdk/platform-tools/adb -P 5037 -s 14231JEC210835 shell pgrep -f \(\[\[:blank:\]\]\|\^\)screenrecord\(\[\[:blank:\]\]\|\$\)' [AndroidUiautomator2Driver@653a (34498909)] Screen recording has not been previously started by Appium. There is nothing to stop [debug] [ADB] Getting IDs of all 'screenrecord' processes [debug] [ADB] Running '/Users/hema/Library/Android/sdk/platform-tools/adb -P 5037 -s 14231JEC210835 shell pgrep -f \(\[\[:blank:\]\]\|\^\)screenrecord\(\[\[:blank:\]\]\|\$\)' [debug] [ADB] Building screenrecord process with the command line: adb -P 5037 -s 14231JEC210835 shell screenrecord --time-limit 180 /sdcard/cc3ff0b6.mp4 [debug] [ADB] Running '/Users/hema/Library/Android/sdk/platform-tools/adb -P 5037 -s 14231JEC210835 shell "[ -e '/sdcard/cc3ff0b6.mp4' ] && echo __PASS__"' [debug] [ADB] Running '/Users/hema/Library/Android/sdk/platform-tools/adb -P 5037 -s 14231JEC210835 shell "[ -e '/sdcard/cc3ff0b6.mp4' ] && echo __PASS__"' [debug] [AndroidUiautomator2Driver@653a (34498909)] Responding to client with driver.startRecordingScreen() result: "" info HTTP <-- POST /wd/hub/session/34498909-af63-4554-bed8-7e110442ba02/appium/start_recording_screen 200 543 ms - 12

Thanks

Errors when you don't have Android tools

Looks like there is a hard dependency for Android tools even if I want to run only on iOS setup

[Appium] Attempting to load plugin appium-dashboard...
[appium-dashboard] Unable to create adb instance
[appium-dashboard] Error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported. Read https://developer.android.com/studio/command-line/variables for more details
An unknown server-side error occurred while processing the command. Original error: Service with "adb" identifier was not found in the container. Register it before usage via explicitly calling the "Container.set" function or using the "@Service()" decorator. (Selenium::WebDriver::Error::UnknownError)
      UnknownError: An unknown server-side error occurred while processing the command. Original error: Service with "adb" identifier was not found in the container. Register it before usage via explicitly calling the "Container.set" function or using the "@Service()" decorator.
          at getResponseForW3CError (/Users/unmeshgundecha/.nvm/versions/node/v17.0.1/lib/node_modules/appium/node_modules/@appium/base-driver/lib/protocol/errors.js:804:9)
          at asyncHandler (/Users/unmeshgundecha/.nvm/versions/node/v17.0.1/lib/node_modules/appium/node_modules/@appium/base-driver/lib/protocol/protocol.js:370:37)
      ./features/support/env.rb:49:in `Before'

Android dependency can be made soft and support iOS runs without needing to install Android tools.

Exception when taking the screenshot while using the ThreadLocalDriver.setTLDriver as driver

Logs:
`org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: The default behavior for this command was to proxy, but the driver did not have the 'proxyCommand' method defined. To fully support plugins, drivers should have 'proxyCommand' set to a jwpProxy object's 'command()' method, in addition to the normal 'proxyReqRes'
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'Dracarys.local', ip: '2401:4900:2180:a6dc:8c65:c09f:b3d7:28f9%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.16', java.version: '13.0.1'
Driver info: io.appium.java_client.android.AndroidDriver
Capabilities {appActivity: tokko.onlineshop.jual.mitra..., appPackage: tokko.onlineshop.jual.mitra..., automationName: UiAutomator2, clearDeviceLogsOnStart: true, databaseEnabled: false, desired: {appActivity: tokko.onlineshop.jual.mitra..., appPackage: tokko.onlineshop.jual.mitra..., automationName: UiAutomator2, clearDeviceLogsOnStart: true, mjpegServerPort: 62889, nativeWebScreenshot: true, noReset: false, platformName: android, platformVersion: 11, skipUnlock: true, udid: RF8N32LS6TK}, deviceApiLevel: 30, deviceManufacturer: samsung, deviceModel: SM-N770F, deviceName: RF8N32LS6TK, deviceScreenDensity: 420, deviceScreenSize: 1080x2400, deviceUDID: RF8N32LS6TK, javascriptEnabled: true, locationContextEnabled: false, mjpegServerPort: 62889, nativeWebScreenshot: true, networkConnectionEnabled: true, noReset: false, pixelRatio: 2.625, platform: LINUX, platformName: Android, platformVersion: 11, skipUnlock: true, statBarHeight: 85, takesScreenshot: true, udid: RF8N32LS6TK, viewportRect: {height: 2104, left: 0, top: 85, width: 1080}, warnings: {}, webStorageEnabled: false}
Session ID: fdb02aed-3118-411a-8936-38e2b6ae6e73

at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:247)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:41)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)
at io.appium.java_client.DefaultGenericMobileElement.execute(DefaultGenericMobileElement.java:45)
at io.appium.java_client.MobileElement.execute(MobileElement.java:1)
at io.appium.java_client.android.AndroidElement.execute(AndroidElement.java:1)
at org.openqa.selenium.remote.RemoteWebElement.getText(RemoteWebElement.java:166)`

notNull Violation: Session.platform cannot be null

Hello,
ive wrongly posted this on the device farm plugin repo, but seems that if I run device farm without Appium Dashboard it works just fine.

Im running Appium 2.0.0-beta.44 (tried 43 and 46 aswell) with Device Farm and Espresso Driver (latest).
The execution is running against an Android Device, as you will see in the logs.

Here is a snippet from the logs:

[debug] [EspressoDriver@65ce (182f1301)] Proxying [GET /appium/device/info] to [GET http://127.0.0.1:59494/session/d4d95850-6137-4b77-9e25-a527f45e11c6/appium/device/info] with no body
[debug] [EspressoDriver@65ce (182f1301)] Got response with status 200: {"id":"5cc1f22b-1790-4f97-9edd-5cf26986fa44","sessionId":"d4d95850-6137-4b77-9e25-a527f45e11c6","value":{"platformVersion":"6.0.1","androidId":"55c85f3aca971d52","realDisplaySize":"720x1280","brand":"Zebra","locale":"de_DE","carrierName":"vodafone.de","apiVersion":"23","manufacturer":"Zebra Technologies","displayDensity":320,"timeZone":"Europe/Amsterdam","model":"TC75x"}}
[AppiumDriver@ce67] New EspressoDriver session created successfully, session 182f1301-cb7d-4a44-af3d-c71744ad758f added to master session list
[debug] [AppiumDriver@ce67] Event 'newSessionStarted' logged at 1670517824226 (17:43:44 GMT+0100 (Mitteleuropรคische Normalzeit))
[appium-dashboard] Adb found. Creating device profiler
[appium-dashboard] Error initializing app profiler
[appium-dashboard] Error: Command 'C:\\Users\\BudovskiyVal\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s undefined shell cat /proc/cpuinfo' exited with code 1
[appium-dashboard]     at ChildProcess.<anonymous> (C:\Users\BudovskiyVal\node_modules\teen_process\lib\exec.js:129:19)
[appium-dashboard]     at ChildProcess.emit (node:events:513:28)
[appium-dashboard]     at maybeClose (node:internal/child_process:1098:16)
[appium-dashboard]     at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)
[HTTP] --> POST /wd/hub/wd-internal/session/182f1301-cb7d-4a44-af3d-c71744ad758f/appium/start_recording_screen
[HTTP] {"options":{"videoType":"libx264","videoFps":10,"timeLimit":1800}}
[debug] [EspressoDriver@65ce (182f1301)] Calling AppiumDriver.startRecordingScreen() with args: [{"videoType":"libx264","videoFps":10,"timeLimit":1800},"182f1301-cb7d-4a44-af3d-c71744ad758f"]
[AppiumDriver@ce67] Plugins which can handle cmd 'startRecordingScreen': appium-dashboard,device-farm
[AppiumDriver@ce67] Plugin device-farm is now handling cmd 'startRecordingScreen'
[device-farm] Received startRecordingScreen request on driver - [object Object]
[AppiumDriver@ce67] Plugin appium-dashboard is now handling cmd 'startRecordingScreen'
[AppiumDriver@ce67] Executing default handling behavior for command 'startRecordingScreen'
[debug] [ADB] Getting IDs of all 'screenrecord' processes
[debug] [ADB] Running 'C:\Users\BudovskiyVal\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s 18123522502223 shell 'pgrep --help; echo $?''
[debug] [ADB] Running 'C:\Users\BudovskiyVal\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s 18123522502223 shell pgrep -f \(\[\[:blank:\]\]\|\^\)screenrecord\(\[\[:blank:\]\]\|\$\)'
[EspressoDriver@65ce (182f1301)] Screen recording has not been previously started by Appium. There is nothing to stop
[debug] [ADB] Getting IDs of all 'screenrecord' processes
[debug] [ADB] Running 'C:\Users\BudovskiyVal\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s 18123522502223 shell pgrep -f \(\[\[:blank:\]\]\|\^\)screenrecord\(\[\[:blank:\]\]\|\$\)'
[debug] [ADB] Building screenrecord process with the command line: adb -P 5037 -s 18123522502223 shell screenrecord --time-limit 180 /sdcard/8f0eabba.mp4
[debug] [ADB] Running 'C:\Users\BudovskiyVal\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s 18123522502223 shell "[ -e '/sdcard/8f0eabba.mp4' ] && echo __PASS__"'
[debug] [ADB] Running 'C:\Users\BudovskiyVal\AppData\Local\Android\Sdk\platform-tools\adb.exe -P 5037 -s 18123522502223 shell "[ -e '/sdcard/8f0eabba.mp4' ] && echo __PASS__"'
[debug] [EspressoDriver@65ce (182f1301)] Responding to client with driver.startRecordingScreen() result: ""
[HTTP] <-- POST /wd/hub/session/182f1301-cb7d-4a44-af3d-c71744ad758f/appium/start_recording_screen 200 614 ms - 12
[HTTP]
[debug] [AppiumDriver@ce67] Encountered internal error running command: SequelizeValidationError: notNull Violation: Session.platform cannot be null,
[debug] [AppiumDriver@ce67] notNull Violation: Session.udid cannot be null
[debug] [AppiumDriver@ce67]     at InstanceValidator._validate (C:\Users\BudovskiyVal\node_modules\sequelize\src\instance-validator.js:78:13)
[debug] [AppiumDriver@ce67]     at processTicksAndRejections (node:internal/process/task_queues:95:5)
[debug] [AppiumDriver@ce67]     at InstanceValidator._validateAndRunHooks (C:\Users\BudovskiyVal\node_modules\sequelize\src\instance-validator.js:111:7)
[debug] [AppiumDriver@ce67]     at InstanceValidator.validate (C:\Users\BudovskiyVal\node_modules\sequelize\src\instance-validator.js:93:12)
[debug] [AppiumDriver@ce67]     at Session.save (C:\Users\BudovskiyVal\node_modules\sequelize\src\model.js:3996:7)
[debug] [AppiumDriver@ce67]     at Function.create (C:\Users\BudovskiyVal\node_modules\sequelize\src\model.js:2280:12)
[HTTP] <-- POST /wd/hub/session 500 64508 ms - 852
[HTTP]
[debug] [HTTP] Request idempotency key: d31e82f0-2295-41a6-82d3-ec047778e907
[HTTP] --> POST /wd/hub/session

Im a bit confused, why the session udid is lost. The session started running fine with an ID. Maybe its the error with cat on cpuinfo that caused this? Can i disable device profiling or screenrecord features to test it?
Thank you in advance!

Screenshot route not found

[HTTP] --> POST //wd/hub/session/cc4f0671-6944-40a9-b440-58a2789fd254/appium/stop_recording_screen
[HTTP] {}
[debug] [HTTP] No route found for //wd/hub/session/cc4f0671-6944-40a9-b440-58a2789fd254/appium/stop_recording_screen
[HTTP] <-- POST //wd/hub/session/cc4f0671-6944-40a9-b440-58a2789fd254/appium/stop_recording_screen 404

SQLITE_ERROR while starting appium server with plugin on macOS

Below error is being displayed while trying to start appium server with the plugin on macOS

  • [Appium] Appium REST http interface listener started on 0.0.0.0:4723
    [Appium] Available drivers:
    [Appium] - [email protected] (automationName 'UiAutomator2')
    [Appium] Available plugins:
    [Appium] - [email protected] (ACTIVE)
    uncaughtException: SQLITE_ERROR: no such column: is_paused
    Error:
    at Database. (/Users/kavyat/.appium/node_modules/appium-dashboard/node_modules/sequelize/src/dialects/sqlite/query.js:227:27)
    at /Users/kavyat/.appium/node_modules/appium-dashboard/node_modules/sequelize/src/dialects/sqlite/query.js:225:50
    at new Promise ()
    at Query.run (/Users/kavyat/.appium/node_modules/appium-dashboard/node_modules/sequelize/src/dialects/sqlite/query.js:225:12)
    at /Users/kavyat/.appium/node_modules/appium-dashboard/node_modules/sequelize/src/sequelize.js:643:28
    at SQLiteQueryInterface.bulkUpdate (/Users/kavyat/.appium/node_modules/appium-dashboard/node_modules/sequelize/src/dialects/abstract/query-interface.js:908:12)
    at Function.update (/Users/kavyat/.appium/node_modules/appium-dashboard/node_modules/sequelize/src/model.js:3266:28)

fix: Currently there is no time out for sessions in dashboard if tests fail in between.

In below image you can see that I had run two tests, that broke in between 40 mins ago and I closed appium server and restared my machine. However the dashboard is still trying to process them. It would be better to just time out these sessions if there is no activity on them for more than say 5 mins (I think browser stack does something similar too?).

image

[Question] Is there any documentation around building / testing from source?

Is there any documentation around building / testing from source?

I tried to build the web app and plugin from source -- installing dependencies, building, running script to install plugin, however, I have been unable to get things to work correctly thus far. I'm probably missing a key step ๐Ÿคท

Error while installing plugin on macOS

I see the below error while installing the plug-in

unmeshgundecha@Unmeshs-MacBook-Pro-2 pos % appium plugin install --source=npm appium-dashboard
Attempting to find and install plugin 'appium-dashboard'
โœ– Installing 'appium-dashboard'
Error: Encountered an error when installing package: Command 'npm install --no-save --no-package-lock appium-dashboard -json' exited with code 1

Updates

  • Node version - 17.0.1
  • Operating System - macOS Monterey (Apple M1Pro Chip)

Further investigation leads to issues in sqlite3 installation.

[Feature] Import & Export function the session results

Currently, the session information is stored in a local sqlite DB and it could be difficult to read it on another host. Therefore it would be great to have the import/export function for a single session.

Users will be able to import another session results on another host and check the results.

Move server and plugin into separate modules so that the server can used in isolation

Currently, the plugin and server are created as a single module and the plugin has direct access to the database.

The idea here is to move the server into a separate module and all logic related to maintaining the data in the database will be completely handled by the server. So the plugin will just format the appium command and call the respective endpoint in the server with the payload and the server will handle the logic of storing the data.

By doing this way, users can run the server in any centralized server of their choice or even in their local machine. while starting the plugin we will pass the server endpoint and access token to authenticate the API.

Since the server is centralized, we can create the same variation of plugin for other automation tools like selenium/webdriver io/cypress and keep the server untouched.

@sbalaji1192 thoughts?

Problem with latest appium 2.0@b46

When i want to start appium server with device-farm and this plugin, console throws this message and shutdown

WARN Appium - Plugin "appium-dashboard" (package appium-dashboard) may be incompatible with the current version of Appium (v2.0.0-beta.46) due to an invalid or missing peer dependency on Appium. Please ask the developer of appium-dashboardto add a peer dependency on^[email protected].

@sudharsan-selvaraj do you have plans to update your plugin in near future?

Tests did not run using appium 2.0 while they did with appium 1.2. Logs are attached.

I first started server 2.0 as below.

PS C:\Program Files\PowerShell\7> appium --plugins=appium-dashboard
[Appium] Attempting to load plugin appium-dashboard...
[Appium] Welcome to Appium v2.0.0-beta.18
[Appium] Non-default server args:
[Appium]   plugins: {
[Appium]     0: appium-dashboard
[Appium]   }
[Appium]   tmpDir: C:\Users\PRAMOD~1\AppData\Local\Temp
[Appium] Attempting to load driver uiautomator2...
[Appium] Attempting to load driver xcuitest...
[appium-dashboard] Dashboard plugin is enabled and will be served at http://localhost:4723/dashboard
[appium-dashboard] If the appium server is started with different port other than 4723, then use the correct port number to access the device farm dashboard
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
[Appium] Available drivers:
[Appium]   - [email protected] (automationName 'UiAutomator2')
[Appium]   - [email protected] (automationName 'XCUITest')
[Appium] Available plugins:
[Appium]   - [email protected] (ACTIVE)
[HTTP] --> GET /dashboard/
[HTTP] {}
[HTTP] <-- GET /dashboard/ 304 11 ms - -
[HTTP]
[HTTP] --> GET /dashboard/static/css/main.2f4d895e.chunk.css
[HTTP] {}
[HTTP] <-- GET /dashboard/static/css/main.2f4d895e.chunk.css 304 11 ms - -
[HTTP]
[HTTP] --> GET /dashboard/static/js/2.f840be54.chunk.js
[HTTP] {}
[HTTP] <-- GET /dashboard/static/js/2.f840be54.chunk.js 304 2 ms - -
[HTTP]
[HTTP] --> GET /dashboard/static/js/main.f1d9b201.chunk.js
[HTTP] {}
[HTTP] <-- GET /dashboard/static/js/main.f1d9b201.chunk.js 304 1 ms - -
[HTTP]
[HTTP] --> GET /dashboard/api/sessions
[HTTP] {}
[HTTP] <-- GET /dashboard/api/sessions 304 13 ms - -
[HTTP]
[HTTP] --> GET /dashboard/manifest.json
[HTTP] {}
[HTTP] <-- GET /dashboard/manifest.json 304 2 ms - -
[HTTP]
[HTTP] --> GET /dashboard/logo192.png

then ran tests from intellij and got below errors. When I run the same tests with appium 1.22, they work fine. Something to investigate?

"C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=5242880 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.4\lib\idea_rt.jar=53996:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.4\lib\idea_rt.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\platform\junit-platform-launcher\1.6.2\junit-platform-launcher-1.6.2.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.4\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.4\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\rt.jar;D:\happium\target\test-classes;D:\happium\target\classes;C:\Users\Pramod Yadav\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\jupiter\junit-jupiter\5.6.2\junit-jupiter-5.6.2.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.6.2\junit-jupiter-api-5.6.2.jar;C:\Users\Pramod Yadav\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Pramod Yadav\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\platform\junit-platform-commons\1.6.2\junit-platform-commons-1.6.2.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.6.2\junit-jupiter-params-5.6.2.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.6.2\junit-jupiter-engine-5.6.2.jar;C:\Users\Pramod Yadav\.m2\repository\org\junit\platform\junit-platform-engine\1.6.2\junit-platform-engine-1.6.2.jar;C:\Users\Pramod Yadav\.m2\repository\io\appium\java-client\7.5.1\java-client-7.5.1.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-java\3.141.59\selenium-java-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver\3.141.59\selenium-chrome-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-edge-driver\3.141.59\selenium-edge-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver\3.141.59\selenium-ie-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-opera-driver\3.141.59\selenium-opera-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-safari-driver\3.141.59\selenium-safari-driver-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15.jar;C:\Users\Pramod Yadav\.m2\repository\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar;C:\Users\Pramod Yadav\.m2\repository\com\google\guava\guava\25.0-jre\guava-25.0-jre.jar;C:\Users\Pramod Yadav\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\Pramod Yadav\.m2\repository\org\checkerframework\checker-compat-qual\2.0.0\checker-compat-qual-2.0.0.jar;C:\Users\Pramod Yadav\.m2\repository\com\google\errorprone\error_prone_annotations\2.1.3\error_prone_annotations-2.1.3.jar;C:\Users\Pramod Yadav\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\Pramod Yadav\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\Pramod Yadav\.m2\repository\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0.jar;C:\Users\Pramod Yadav\.m2\repository\com\squareup\okio\okio\1.14.0\okio-1.14.0.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59.jar;C:\Users\Pramod Yadav\.m2\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;C:\Users\Pramod Yadav\.m2\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;C:\Users\Pramod Yadav\.m2\repository\org\apache\httpcomponents\httpcore\4.4.13\httpcore-4.4.13.jar;C:\Users\Pramod Yadav\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\Pramod Yadav\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Pramod Yadav\.m2\repository\cglib\cglib\3.3.0\cglib-3.3.0.jar;C:\Users\Pramod Yadav\.m2\repository\org\ow2\asm\asm\7.1\asm-7.1.jar;C:\Users\Pramod Yadav\.m2\repository\commons-validator\commons-validator\1.7\commons-validator-1.7.jar;C:\Users\Pramod Yadav\.m2\repository\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;C:\Users\Pramod Yadav\.m2\repository\commons-digester\commons-digester\2.1\commons-digester-2.1.jar;C:\Users\Pramod Yadav\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\Pramod Yadav\.m2\repository\commons-io\commons-io\2.8.0\commons-io-2.8.0.jar;C:\Users\Pramod Yadav\.m2\repository\org\springframework\spring-context\5.3.4\spring-context-5.3.4.jar;C:\Users\Pramod Yadav\.m2\repository\org\springframework\spring-aop\5.3.4\spring-aop-5.3.4.jar;C:\Users\Pramod Yadav\.m2\repository\org\springframework\spring-beans\5.3.4\spring-beans-5.3.4.jar;C:\Users\Pramod Yadav\.m2\repository\org\springframework\spring-core\5.3.4\spring-core-5.3.4.jar;C:\Users\Pramod Yadav\.m2\repository\org\springframework\spring-jcl\5.3.4\spring-jcl-5.3.4.jar;C:\Users\Pramod Yadav\.m2\repository\org\springframework\spring-expression\5.3.4\spring-expression-5.3.4.jar;C:\Users\Pramod Yadav\.m2\repository\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar;C:\Users\Pramod Yadav\.m2\repository\org\projectlombok\lombok\1.18.16\lombok-1.18.16.jar;C:\Users\Pramod Yadav\.m2\repository\com\typesafe\config\1.4.1\config-1.4.1.jar;C:\Users\Pramod Yadav\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\Pramod Yadav\.m2\repository\org\slf4j\slf4j-log4j12\1.7.30\slf4j-log4j12-1.7.30.jar;C:\Users\Pramod Yadav\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\Pramod Yadav\.m2\repository\com\github\javafaker\javafaker\0.15\javafaker-0.15.jar;C:\Users\Pramod Yadav\.m2\repository\org\yaml\snakeyaml\1.20\snakeyaml-1.20-android.jar;C:\Users\Pramod Yadav\.m2\repository\com\github\mifmif\generex\1.0.2\generex-1.0.2.jar;C:\Users\Pramod Yadav\.m2\repository\dk\brics\automaton\automaton\1.11-8\automaton-1.11-8.jar;C:\Users\Pramod Yadav\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.1\jackson-databind-2.11.1.jar;C:\Users\Pramod Yadav\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.1\jackson-core-2.11.1.jar;C:\Users\Pramod Yadav\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.1\jackson-annotations-2.11.1.jar;C:\Users\Pramod Yadav\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.1\jackson-datatype-jsr310-2.11.1.jar;C:\Users\Pramod Yadav\.m2\repository\org\json\json\20210307\json-20210307.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 "org.saucedemo.login.TestProduct,assertThatProductDescriptionIsCorrectForAStandardUser(java.lang.String,java.lang.String,java.lang.String)"
Nov 06, 2021 10:35:24 AM org.junit.platform.launcher.core.LauncherConfigurationParameters fromClasspathResource
INFO: Loading JUnit Platform configuration parameters from classpath resource [file:/D:/happium/target/classes/junit-platform.properties].
Nov 06, 2021 10:35:24 AM org.junit.jupiter.engine.config.EnumConfigurationParameterConverter get
INFO: Using parallel execution mode 'SAME_THREAD' set via the 'junit.jupiter.execution.parallel.mode.default' configuration parameter.
[INFO] 2021-11-06 10:35:25,082 CapabilitiesFactory: Running tests for TestClass: TestProduct
[INFO] 2021-11-06 10:35:25,083 CapabilitiesFactory: Running tests on HOST: localhost
[INFO] 2021-11-06 10:35:25,083 CapabilitiesFactory: Running tests on PLATFORM_NAME: android
[INFO] 2021-11-06 10:35:25,083 CapabilitiesFactory: Running tests on DEVICE_TYPE: virtual
[INFO] 2021-11-06 10:35:25,083 CapabilitiesFactory: Running tests on DEVICE_NAME: Pixel_4_API_31
[INFO] 2021-11-06 10:35:25,086 CapabilitiesFactory: parsing desired capabilities from: ./desired-capabilities/android/android-common-capabilities.json
[INFO] 2021-11-06 10:35:25,099 CapabilitiesFactory: parsing desired capabilities from: ./desired-capabilities/android/android-emulator-default-capabilities.json
[INFO] 2021-11-06 10:35:25,102 ExecutionMode: parallelMode: true
[INFO] 2021-11-06 10:35:25,102 ExecutionMode: classMode: same_thread
[INFO] 2021-11-06 10:35:25,102 ExecutionMode: testMode: same_thread
[INFO] 2021-11-06 10:35:25,102 ExecutionMode: All classes run in series. Within each class, all tests run in series.
[INFO] 2021-11-06 10:35:25,103 AvailableDevices: Device details: Device(udid=emulator-5554, deviceName=Pixel_4_API_31, systemPort=8200)

org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 96 milliseconds
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-GPU5LFR', ip: '172.30.64.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-GPU5LFR', ip: '172.30.64.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver

	at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:216)
	at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:225)
	at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:247)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
	at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:41)
	at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
	at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
	at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
	at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:338)
	at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
	at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:37)
	at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:89)
	at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:99)
	at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:96)
	at org.saucedemo.factories.DriverFactory.getDriver(DriverFactory.java:43)
	at org.saucedemo.login.TestProduct.setUp(TestProduct.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:126)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptBeforeEachMethod(TimeoutExtension.java:76)
	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeMethodInExtensionContext(ClassBasedTestDescriptor.java:481)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$synthesizeBeforeEachMethodAdapter$18(ClassBasedTestDescriptor.java:466)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachMethods$2(TestMethodTestDescriptor.java:169)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$5(TestMethodTestDescriptor.java:197)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:197)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachMethods(TestMethodTestDescriptor.java:166)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:133)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.submit(ForkJoinPoolHierarchicalTestExecutorService.java:104)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:198)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:138)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:106)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:373)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:106)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
	Suppressed: java.lang.NullPointerException
		at org.saucedemo.factories.devices.AvailableDevices.freeDevice(AvailableDevices.java:173)
		at org.saucedemo.testresults.TestResult.packUp(TestResult.java:53)
		at org.saucedemo.login.TestProduct.tearDown(TestProduct.java:42)
		at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.lang.reflect.Method.invoke(Method.java:498)
		at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
		at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
		at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
		at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:126)
		at org.junit.jupiter.engine.extension.TimeoutExtension.interceptAfterEachMethod(TimeoutExtension.java:108)
		at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
		at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
		at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
		at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
		at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeMethodInExtensionContext(ClassBasedTestDescriptor.java:481)
		at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$synthesizeAfterEachMethodAdapter$19(ClassBasedTestDescriptor.java:471)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachMethods$9(TestMethodTestDescriptor.java:238)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$12(TestMethodTestDescriptor.java:271)
		at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:271)
		at java.util.ArrayList.forEach(ArrayList.java:1257)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:270)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachMethods(TestMethodTestDescriptor.java:236)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:141)
		... 88 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:193)
	... 129 more
Caused by: org.openqa.selenium.UnsupportedCommandException: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 96 milliseconds
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-GPU5LFR', ip: '172.30.64.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
	at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$errorHandler$0(JsonWireProtocolResponse.java:54)
	at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
	at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
	at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
	... 134 more

[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: Running tests for TestClass: TestProduct
[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: Running tests on HOST: localhost
[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: Running tests on PLATFORM_NAME: android
[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: Running tests on DEVICE_TYPE: virtual
[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: Running tests on DEVICE_NAME: Pixel_4_API_31
[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: parsing desired capabilities from: ./desired-capabilities/android/android-common-capabilities.json
[INFO] 2021-11-06 10:35:26,621 CapabilitiesFactory: parsing desired capabilities from: ./desired-capabilities/android/android-emulator-default-capabilities.json
[INFO] 2021-11-06 10:35:26,622 ExecutionMode: parallelMode: true
[INFO] 2021-11-06 10:35:26,622 ExecutionMode: classMode: same_thread
[INFO] 2021-11-06 10:35:26,622 ExecutionMode: testMode: same_thread
[INFO] 2021-11-06 10:35:26,622 ExecutionMode: All classes run in series. Within each class, all tests run in series.
[INFO] 2021-11-06 10:35:26,622 AvailableDevices: Device details: Device(udid=emulator-5554, deviceName=Pixel_4_API_31, systemPort=8200)

org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 7 milliseconds
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-GPU5LFR', ip: '172.30.64.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-GPU5LFR', ip: '172.30.64.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver

	at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:216)
	at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:225)
	at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:247)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
	at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:41)
	at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
	at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
	at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
	at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:338)
	at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
	at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:37)
	at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:89)
	at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:99)
	at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:96)
	at org.saucedemo.factories.DriverFactory.getDriver(DriverFactory.java:43)
	at org.saucedemo.login.TestProduct.setUp(TestProduct.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:126)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptBeforeEachMethod(TimeoutExtension.java:76)
	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeMethodInExtensionContext(ClassBasedTestDescriptor.java:481)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$synthesizeBeforeEachMethodAdapter$18(ClassBasedTestDescriptor.java:466)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachMethods$2(TestMethodTestDescriptor.java:169)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$5(TestMethodTestDescriptor.java:197)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:197)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachMethods(TestMethodTestDescriptor.java:166)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:133)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.submit(ForkJoinPoolHierarchicalTestExecutorService.java:104)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:198)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:138)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:106)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:373)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:106)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
	at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
	Suppressed: java.lang.NullPointerException
		at org.saucedemo.factories.devices.AvailableDevices.freeDevice(AvailableDevices.java:173)
		at org.saucedemo.testresults.TestResult.packUp(TestResult.java:53)
		at org.saucedemo.login.TestProduct.tearDown(TestProduct.java:42)
		at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.lang.reflect.Method.invoke(Method.java:498)
		at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
		at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
		at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
		at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:126)
		at org.junit.jupiter.engine.extension.TimeoutExtension.interceptAfterEachMethod(TimeoutExtension.java:108)
		at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
		at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
		at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
		at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
		at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
		at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeMethodInExtensionContext(ClassBasedTestDescriptor.java:481)
		at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$synthesizeAfterEachMethodAdapter$19(ClassBasedTestDescriptor.java:471)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachMethods$9(TestMethodTestDescriptor.java:238)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$12(TestMethodTestDescriptor.java:271)
		at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:271)
		at java.util.ArrayList.forEach(ArrayList.java:1257)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:270)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachMethods(TestMethodTestDescriptor.java:236)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:141)
		... 88 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:193)
	... 129 more
Caused by: org.openqa.selenium.UnsupportedCommandException: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 7 milliseconds
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-GPU5LFR', ip: '172.30.64.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
	at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$errorHandler$0(JsonWireProtocolResponse.java:54)
	at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
	at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
	at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
	... 134 more


Process finished with exit code -1

Clearing session cache

How can i clear all the old sessions? I tried to remove the sql database and all videos + screenshots. The database was recreated but it stopped working, maybe a command to clear the whole cache would be useful

loading plugin gave an error that 'address already in use 0.0.0.0:4723'

Hello Sudarshan,
I installed appium 2.0 and then your plugin.
Started appium 2.0 server and then as suggested tried to load the dashboard when I get this error.

I am working on a windows machine with powershell 7 terminal.
below are logs from appium server.

PS C:\Program Files\PowerShell\7> appium --version
2.0.0-beta.18
PS C:\Program Files\PowerShell\7> appium
[Appium] Welcome to Appium v2.0.0-beta.18
[Appium] Non-default server args:
[Appium]   tmpDir: C:\Users\PRAMOD~1\AppData\Local\Temp
[Appium] Attempting to load driver uiautomator2...
[Appium] Attempting to load driver xcuitest...
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
[Appium] Available drivers:
[Appium]   - [email protected] (automationName 'UiAutomator2')
[Appium]   - [email protected] (automationName 'XCUITest')
[Appium] Available plugins:
[Appium]   - [email protected]
[Appium] No plugins activated. Use the --plugins flag with names of plugins to activate
[HTTP] --> GET /dashboard
[HTTP] {}
[debug] [HTTP] No route found for /dashboard
[HTTP] <-- GET /dashboard 404 55 ms - 211
[HTTP]
[HTTP] <-- GET /favicon.ico 200 1 ms - 1150
[HTTP]

and below are logs while trying to load plugin.

PS C:\Users\Pramod Yadav> appium --plugins=appium-dashboard
[Appium] Attempting to load plugin appium-dashboard...
[Appium] Welcome to Appium v2.0.0-beta.18
[Appium] Non-default server args:
[Appium]   plugins: {
[Appium]     0: appium-dashboard
[Appium]   }
[Appium]   tmpDir: C:\Users\PRAMOD~1\AppData\Local\Temp
[Appium] Attempting to load driver uiautomator2...
[Appium] Attempting to load driver xcuitest...
[appium-dashboard] Dashboard plugin is enabled and will be served at http://localhost:4723/dashboard
[appium-dashboard] If the appium server is started with different port other than 4723, then use the correct port number to access the device farm dashboard
[HTTP] Could not start REST http interface listener. The requested port may already be in use. Please make sure there is no other instance of this server running already.
[Appium] Could not configure Appium server. It's possible that a driver or plugin tried to update the server and failed. Original error: listen EADDRINUSE: address already in use 0.0.0.0:4723
[debug] [Appium] Error: listen EADDRINUSE: address already in use 0.0.0.0:4723
[debug] [Appium]     at Server.setupListenHandle [as _listen2] (node:net:1319:16)
[debug] [Appium]     at listenInCluster (node:net:1367:12)
[debug] [Appium]     at doListen (node:net:1505:7)
[debug] [Appium]     at processTicksAndRejections (node:internal/process/task_queues:84:21)
PS C:\Users\Pramod Yadav> appium --version
2.0.0-beta.18
PS C:\Users\Pramod Yadav>

Unable to Load Dashboard with Devices on Windows

Appium Version : 2.0.0-beta.25
OS : Windows 10
Node : v14.17.5

Logs :
[HTTP] --> GET /dashboard/api/sessions?
[HTTP] {}
(node:12668) UnhandledPromiseRejectionWarning: Error:
at Database. (C:\Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\dialects\sqlite\query.js:227:27)
at C:\Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\dialects\sqlite\query.js:225:50
at new Promise ()
at Query.run (C:\Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\dialects\sqlite\query.js:225:12)
at C:\Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\sequelize.js:642:28
at SQLiteQueryInterface.rawSelect (C:
DashboardIssueSS
Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\dialects\abstract\query-interface.js:1021:18)
at Function.aggregate (C:\Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\model.js:2022:19)
at Function.count (C:\Users\Rohit Prabhu\A
DashboardIssue.txt
ppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\model.js:2070:20)
at async Promise.all (index 0)
at Function.findAndCountAll (C:\Users\Rohit Prabhu\AppData\Roaming\npm\appium-dashboard\node_modules\sequelize\lib\model.js:2129:27)
(node:12668) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:12668) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

DashboardIssue.txt
DashboardIssueSS

Not able to build

post-install fails with below error

> [email protected] postinstall
> npm run sequelize:migrate:undo && npm run sequelize:migrate


> [email protected] sequelize:migrate:undo
> sequelize-cli db:migrate:undo

node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module './lib/config.js'
Require stack:
- /Users/saikrishna/Documents/git/appium-dashboard-plugin/.sequelizerc
- /Users/saikrishna/Documents/git/appium-dashboard-plugin/node_modules/sequelize-cli/lib/core/yargs.js
- /Users/saikrishna/Documents/git/appium-dashboard-plugin/node_modules/sequelize-cli/lib/sequelize
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/Users/saikrishna/Documents/git/appium-dashboard-plugin/.sequelizerc:3:16)
    at Module._compile (node:internal/modules/cjs/loader:1095:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:999:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/saikrishna/Documents/git/appium-dashboard-plugin/.sequelizerc',
    '/Users/saikrishna/Documents/git/appium-dashboard-plugin/node_modules/sequelize-cli/lib/core/yargs.js',
    '/Users/saikrishna/Documents/git/appium-dashboard-plugin/node_modules/sequelize-cli/lib/sequelize'
  ]
}

Node.js v17.0.1

[Feature] Provide list of all XHR calls safari when running tests in web apps for ios

For Android:
use Chrome debug protocol. To find the remote-debugging-port use adb -s emulator-5554 forward --list.
Sample output is

emulator-5554 tcp:54849 localabstract:chrome_devtools_remote
emulator-5554 tcp:8201 tcp:6790
emulator-5554 tcp:8202 tcp:6790
emulator-5554 tcp:8203 tcp:6790
emulator-5554 tcp:8204 tcp:6790
emulator-5554 tcp:8205 tcp:6790
emulator-5554 tcp:8206 tcp:6790
emulator-5554 tcp:8207 tcp:6790
emulator-5554 tcp:8208 tcp:6790
emulator-5554 tcp:8209 tcp:6790
emulator-5554 tcp:59363 localabstract:chrome_devtools_remote
emulator-5554 tcp:60350 localabstract:chrome_devtools_remote
emulator-5554 tcp:60578 localabstract:chrome_devtools_remote
emulator-5554 tcp:60895 localabstract:chrome_devtools_remote
emulator-5554 tcp:8210 tcp:6790
emulator-5554 tcp:61285 localabstract:chrome_devtools_remote
emulator-5554 tcp:8211 tcp:6790
emulator-5554 tcp:54546 localabstract:chrome_devtools_remote

pick the port number from the last entry that has localabstract:chrome_devtools_remote

For IOS:
Use appium-remote-debugger

device-farm integration

@sudharsan-selvaraj Thanks for the great plugin. @SrinivasanTarget and I have actively maintaining appium-device-farm to solve parallel execution and one of the part of the plugin was dashboard to show enough information about the device state and tests executed on the device with all possible information. We see that this plugin has all that we wanted to build.

I gave it a try with device-farm and bumped into this issue

UnknownError: An unknown server-side error occurred while processing the command. Original error: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received an instance of Object
      at getResponseForW3CError (/usr/local/lib/node_modules/appium/node_modules/@appium/base-driver/lib/protocol/errors.js:804:9)
      at asyncHandler (/usr/local/lib/node_modules/appium/node_modules/@appium/base-driver/lib/protocol/protocol.js:370:37)
      at runMicrotasks (<anonymous>)
      at processTicksAndRejections (node:internal/process/task_queues:96:5)

Also wanted to know if you would be happy to have this integrated with device-farm so we don't re-invent the wheel for few changes.

Thoughts?

Make UI responsive

Currently, the UX of the web app on a smaller screen is ver bad. Need a revamp for responsive UI support.

Session stays running even after Appium Server Shut Down and restart of system

The Session keeps running even after a reboot/restart of the system and when I run appium with the plugin it restarts these sessions. But with no way to stop them. I have clicked the Pause and checked they did not stop. I tried killing any other connections along with pids and I can't find anything related. Not sure if it's a bug or if someone can tell me how to shut them down so I can delete the runs.
image

Does not work with Appium v2.0.0-beta.40

When I try to install this plugin with [email protected], I got this message.

`Plugin "appium-dashboard" has 1 potential problem:

  • Plugin "appium-dashboard" (package appium-dashboard) may be incompatible with the current version of Appium (v2.0.0-beta.40) due to an invalid or missing peer dependency on Appium. Please ask the developer of appium-dashboard to add a peer dependency on ^[email protected].
    Seems the dependency is missing from the plugin.

Readme: To add instructions for users migration from 1.X to 2.0 - since 2.0 has breaking changes and without help some users may be frustrated post migration.

Although your plugin scope should not bother about migration from 1.X to 2.0 however there are breaking changes in 2.0 and when most users will try to install 2.0 to try your awesome plugin, they will find that there stable tests don't run anymore.

Thus although helping users with migration should not really be a concern for your plugin, adding those instructions will help new users to easily be able to use your plugin without feeling lost due to 2.0 breaking changes.

Two such breaking changes that I encountered while migrating were:
One) -> To run this command appium -pa /wd/hub --plugins=appium-dashboard instead of just this command appium --plugins=appium-dashboard, if your base URL contains /wd/hub (which it should for 1/X) and which is now not supported in appium 2.0.
appium/appium#15261
Two) -> The existing appium capabilities are not supported in 2.0 and there are a couple of workarounds users would need to do to be able to run their existing projects in 2.0 and use your dashboard. These are listed here: https://appiumpro.com/editions/123-migrating-to-appium-20-part-1-capability-prefixes

Do let me know what you think about these suggestions?

P.S: On other note, if you like, I can be a contributor to your awesome project and give not just suggestions but also create PRs with solutions. If you like this idea, do ping me on linkedin and I will be happy to contribute where I can :). I am also working on a new open source project which is first of its kind and if you like, I would be happy to have you as a contributor :). Cheers!

[Feature request] - Would it be an idea to display project/execution name &build number in dashboard?

The dashboard displays the session id along with the version and device name when a test is run. It would be much more convenient to keep track of reports executed in the app version & specific build numbers if we added tags such as project name, execution name, and build number(similar to the BrowserStack approach, passing the capabilities of project/execution&build info and that gets displayed in dashboard).

let me know how to make session with appium-dashboard

I had install appium 2.0, appium-dashboard
and successfully started appium-dashboard to http://localhost:4723/dashboard/

image

as you see there is no session. so to make session I use appium inspector

like this

image

but i can't start session ๐Ÿ˜ญ

how can i make the session?

when i start appium server without appium-dashboard, I can start session successfully.

image

please help me.

started appium-dashboard successfully.
image

I can't make session.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.