in Education by
Context: I have been writing automated test scripts with Appium for quite a while and everything works well most of the time, but now I’m trying to execute tests with multiple devices using Appium grid and I am encountering issues when I’m executing the tests with more than 2 devices. Problem: Can’t execute test with Appium grid when using more than 2 devices. I’m almost certain that the issue is with the node configuration, I simply tried to follow examples online, but didn’t find anywhere defined, what is mandatory in the node configs. My setup is this: Node config files: all the devices are physical LG K11: { "capabilities": [ { "deviceName":"xxxxxxx", "version":"7.1.2", "platformName":"Android", "automationName": "Appium”, "udid":"xxxxxxx" } ], "configuration": { "cleanUpCycle":3000, "timeOut":300000, "proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url":"http://127.0.0.1:4723/wd/hub", "host":"127.0.0.1", "port": 4723, "register": true, "registerCycle": 5000, "hubPort":4444, "hubHost":"127.0.0.1", "hubProtocol": "http" } } Samsung Tablet S4: { "capabilities": [ { "deviceName":"xxxxxxx", "version":"8.1.0", "platformName":"Android", "automationName": "Appium", "udid":"xxxxxxx" } ], "configuration": { "cleanUpCycle":3000, "timeOut":300000, "proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url":"http://127.0.0.1:4492/wd/hub", "host":"127.0.0.1", "port":4492, "register": true, "registerCycle": 5000, "hubPort":4444, "hubHost":"127.0.0.1", "hubProtocol": "http" } } Samsung Galaxy S9: { "capabilities": [ { "deviceName":"xxxxxxx", "version":"8.0.0", "platformName":"Android", "automationName": "Appium", "udid":"xxxxxxx" } ], "configuration": { "cleanUpCycle":3000, "timeOut":300000, "proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url":"http://127.0.0.1:8201/wd/hub", "host":"127.0.0.1", "port":8201, "register": true, "registerCycle": 5000, "hubPort":4444, "hubHost":"127.0.0.1", "hubProtocol": "http" } } I start the nodes by executing the following commands in 4 separate terminal tabs: 1)java -jar selenium-server-standalone-3.141.59.jar -role hub 2)appium -p 4723 --nodeconfig= /LG_K11.json 3)appium -p 4492 --nodeconfig= /Samsung_Tab_S4.json 4)appium -p 8201 --nodeconfig= /Samsung_Galaxy_S9.json Then in IntelliJ I run this code to initialise the nodes: I only change the ports, udid and deviceName capabilities and I run the initialisation methods in separate threads and wait for all of them to finish. initDevice(String udid, int port){ DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName",udid ); capabilities.setCapability("appPackage", “xxxxxxxxx”); capabilities.setCapability("appActivity","MainActivity"); capabilities.setCapability("platformName","Android"); capabilities.setCapability("udid",udid); capabilities.setCapability("noReset", true); try { String appiumServerURL = String.format("http://127.0.0.1:%d/wd/hub", port); driver = new AndroidDriver(new URL(appiumServerURL), desiredCapabilities); } catch (MalformedURLException e) { e.printStackTrace(); } } And after initialising, when I try to execute any command, such as findElement, I get this crash on one of the devices: org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Android bootstrap socket crashed: Error: This socket has been ended by the other party Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: ‘xxxxxx’, ip: ‘xxxxxxxxxx’, os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.3', java.version: '1.8.0_191' Driver info: io.appium.java_client.android.AndroidDriver Capabilities {appActivity: MainActivity, appPackage: xxxxxxxxxx, databaseEnabled: false, desired: {appActivity: MainActivity, appPackage: xxxxxxxx, deviceName: xxxxxx, noReset: true, platformName: android, udid: xxxxxxxx}, deviceManufacturer: samsung, deviceModel: SM-G960F, deviceName: xxxxxxx, deviceScreenSize: 1440x2960, deviceUDID: xxxxxxx, javascriptEnabled: true, locationContextEnabled: false, networkConnectionEnabled: true, noReset: true, platform: LINUX, platformName: Android, platformVersion: 8.0.0, takesScreenshot: true, udid: xxxxxxxxxx, warnings: {}, webStorageEnabled: false} Session ID: xxxxxxxx *** Element info: {Using=xpath, value=//android.widget.ImageView[@content-desc="More options"]} 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.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:239) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42) 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.findElement(RemoteWebDriver.java:323) at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:62) at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:428) at io.appium.java_client.DefaultGenericMobileDriver.findElementByXPath(DefaultGenericMobileDriver.java:152) at io.appium.java_client.AppiumDriver.findElementByXPath(AppiumDriver.java:1) at io.appium.java_client.android.AndroidDriver.findElementByXPath(AndroidDriver.java:1) at org.openqa.selenium.By$ByXPath.findElement(By.java:353) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315) at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58) at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:205) at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:201) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:249) at xxxxxxxxx.BaseScreen.waitAndFind(BaseScreen.java:77) at xxxxxxxxx.screens.BaseScreen.waitAndFind(BaseScreen.java:73) at xxxxxxxxx.screens.MainScreen.getBroadcastOptionsButton(MainScreen.java:23) at xxxxxxxxx.tests.PositiveFlows.userClicksBroadcastOptionsMenu(PositiveFlows.java:400) at xxxxxxxxx.tests.PositiveFlows.tc5(PositiveFlows.java:316) 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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Android bootstrap socket crashed: Error: This socket has been ended by the other party Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: xxxxxxx, ip: xxxxxxxx, os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.3', java.version: '1.8.0_191' Driver info: io.appium.java_client.android.AndroidDriver Capabilities {appActivity: MainActivity, appPackage: xxxxxxx, databaseEnabled: false, desired: {appActivity: MainActivity, appPackage: xxxxxxx, deviceName: xxxxxxx, noReset: true, platformName: android, udid: xxxxxxx}, deviceManufacturer: samsung, deviceModel: SM-G960F, deviceName: xxxxxxx, deviceScreenSize: 1440x2960, deviceUDID: xxxxxxx, javascriptEnabled: true, locationContextEnabled: false, networkConnectionEnabled: true, noReset: true, platform: LINUX, platformName: Android, platformVersion: 8.0.0, takesScreenshot: true, udid: xxxxxxx, warnings: {}, webStorageEnabled: false} Session ID: xxxxxxx 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.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:239) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:46) 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.quit(RemoteWebDriver.java:452) at xxxxxxx.tests.PositiveFlows.tearDown(PositiveFlows.java:476) 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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) JavaScript questions and answers, JavaScript questions pdf, JavaScript question bank, JavaScript questions and answers pdf, mcq on JavaScript pdf, JavaScript questions and solutions, JavaScript mcq Test , Interview JavaScript questions, JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)

1 Answer

0 votes
by
Solved it, the problem was that I needed to pass a bootstrap port, because they were conflicting. So added "-bp 1020x" to the commands. Before: appium -p 4723 --nodeconfig= /LG_K11.json After: appium -p 4723 -bp 10200 --nodeconfig= /LG_K11.json This link might help for people facing issues in the future: https://dpgraham.github.io/appium-docs/setup/parallel_tests/

Related questions

0 votes
    This question already has answers here: Saving path in String (4 answers) Closed 5 years ago. I'm ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jun 30, 2022 in Education by JackTerrance
0 votes
    This question already has answers here: Saving path in String (4 answers) Closed 5 years ago. I'm ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jun 23, 2022 in Education by JackTerrance
0 votes
    Is it possible that a function have more than one return statements? ,1.true,2.false Select the correct answer from above options...
asked Dec 25, 2021 in Education by JackTerrance
0 votes
    ______________ allows the algorithm to execute more quickly by performing CPU activity in parallel with I/O ... topic in division Query Processing Techniques of Database Management...
asked Oct 10, 2021 in Education by JackTerrance
0 votes
    __________ is a set of conventions & rules set for communicating two or more devices residing in the same network? ... questions and answers pdf, mcq on Cyber Security pdf,...
asked Nov 5, 2021 in Education by JackTerrance
0 votes
    How to get list of restaurants by using google maps. I want to get more than 20. Is it possible? ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Feb 12, 2022 in Education by JackTerrance
0 votes
    What happens when number of available energy minima be more than number of patterns to be stored? (a) no effect (b) ... (d) none of the mentioned Please answer the above question....
asked Sep 3, 2022 in Education by JackTerrance
0 votes
    What happens when number of patterns is more than number of basins of attraction? (a) false wells (b) storage ... (d) none of the mentioned Please answer the above question....
asked Aug 30, 2022 in Education by JackTerrance
0 votes
    What happens when number of patterns is more than number of basins of attraction? (a) false wells (b) storage ... (d) none of the mentioned Please answer the above question....
asked Aug 30, 2022 in Education by JackTerrance
0 votes
    I got some question regarding the shared and static libraries.So let me tell you what i did is, I ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Feb 26, 2022 in Education by JackTerrance
0 votes
    When there are more than one independent variables in the model, then the linear model is termed as _______ (a ... of R Programming Select the correct answer from above options...
asked Feb 10, 2022 in Education by JackTerrance
0 votes
    When is cloud cheaper than owning? a. When utility premium is more than the ratio of peak demand to average ... to average demand. Select the correct answer from above options...
asked Dec 22, 2021 in Education by JackTerrance
0 votes
    I have two collection vmdetails and rsc_installtion_status , i want to select the documents from rsc_installtion_status ... Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Jun 2, 2022 in Education by JackTerrance
0 votes
    You are given a data set consisting of variables with more than 30 percent missing values. How will you deal with them?...
asked Apr 26, 2021 in Technology by JackTerrance
0 votes
    EJ Write T for true and F for false. 71. Input devices are used to store the data. 2. Calculations are done ... is a system software. Select the correct answer from above options...
asked Dec 6, 2021 in Education by JackTerrance
...