## Description
Im trying to perform parallel test using selenium grid but im en…countring this issue when im running the test
Unable to parse remote response: <html>
<head>
Cannot extract a capabilities from the request: {
"desiredCapabilities"
## Environment
OS macOs
Testng version 6.14.3
java client 7.0.0
selenium-server-standalone-3.13.0 and 3.141.59 same result
Appium version 1.12.1
## Details
`
org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: Unable to parse remote response: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /wd/hub/session. Reason:
<pre> Server Error</pre></p><h3>Caused by:</h3><pre>java.io.IOException: org.openqa.grid.common.exception.GridException: Cannot extract a capabilities from the request: {
"desiredCapabilities": {
"appPackage": "com.sasd",
"clearSystemFiles": true,
"uiautomator2ServerInstallTimeout": "6000",
"unlockKey": "pass",
"deviceId": "192.168.1.4:5555",
"deviceName": "SM_N950F",
"appActivity": "cosdy",
"platformVersion": "9",
"automationName": "uiautomator2",
"unlockType": "password",
"autoGrantPermissions": "true",
"platformName": "Android",
"systemPort": "8230"
},
"capabilities": {
"firstMatch": [
{
"appium:appActivity": "comdfstivity",
"appium:appPackage": "comsdfonary",
"appium:autoGrantPermissions": "true",
"appium:automationName": "uiautomator2",
"appium:clearSystemFiles": true,
"deviceId": "192.168.1.4:5555",
"appium:deviceName": "SM_N950F",
"platformName": "android",
"appium:platformVersion": "9",
"appium:systemPort": "8230",
"uiautomator2ServerInstallTimeout": "6000",
"unlockKey": "pass",
"unlockType": "password"
}
]
}
}
at org.openqa.grid.web.servlet.DriverServlet.process(DriverServlet.java:137)
at org.openqa.grid.web.servlet.DriverServlet.doPost(DriverServlet.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.seleniumhq.jetty9.servlet.ServletHolder.handle(ServletHolder.java:860)
at org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:535)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
at org.seleniumhq.jetty9.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
at org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
at org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.seleniumhq.jetty9.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
at org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.seleniumhq.jetty9.server.Server.handle(Server.java:530)
at org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:347)
at org.seleniumhq.jetty9.server.HttpConnection.onFillable(HttpConnection.java:256)
at org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:102)
at org.seleniumhq.jetty9.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
at org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)
at org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)
at org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.seleniumhq.jetty9.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382)
at org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
at org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.openqa.grid.common.exception.GridException: Cannot extract a capabilities from the request: {
"desiredCapabilities": {
"appPackage": "sdsd",
"clearSystemFiles": true,
"uiautomator2ServerInstallTimeout": "6000",
"unlockKey": "pass",
"deviceId": "192.168.1.4:5555",
"deviceName": "SM_N950F",
"appActivity": "cdsfsdfctivity",
"platformVersion": "9",
"automationName": "uiautomator2",
"unlockType": "password",
"autoGrantPermissions": "true",
"platformName": "Android",
"systemPort": "8230"
},
"capabilities": {
"firstMatch": [
{
"appium:appActivity": "sd",
"appium:appPackage": "csds",
"appium:autoGrantPermissions": "true",
"appium:automationName": "uiautomator2",
"appium:clearSystemFiles": true,
"deviceId": "192.168.1.4:5555",
"appium:deviceName": "SM_N950F",
"platformName": "android",
"appium:platformVersion": "9",
"appium:systemPort": "8230",
"uiautomator2ServerInstallTimeout": "6000",
"unlockKey": "pass",
"unlockType": "password"
}
]
}
}
at org.openqa.grid.web.servlet.handler.WebDriverRequest.extractDesiredCapability(WebDriverRequest.java:76)
at org.openqa.grid.web.servlet.handler.SeleniumBasedRequest.<init>(SeleniumBasedRequest.java:102)
at org.openqa.grid.web.servlet.handler.WebDriverRequest.<init>(WebDriverRequest.java:36)
at org.openqa.grid.web.servlet.handler.WebDriverRequestFactory.createFromRequest(WebDriverRequestFactory.java:30)
at org.openqa.grid.web.servlet.handler.SeleniumBasedRequest.createFromRequest(SeleniumBasedRequest.java:73)
at org.openqa.grid.web.servlet.DriverServlet.process(DriverServlet.java:84)
... 29 more
Caused by: java.lang.IllegalArgumentException: Illegal key values seen in w3c capabilities: [deviceId, uiautomator2ServerInstallTimeout, unlockKey, unlockType]
at org.openqa.selenium.remote.NewSessionPayload.lambda$validate$6(NewSessionPayload.java:211)
at java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:372)
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$11$1.accept(ReferencePipeline.java:373)
at java.util.LinkedList$LLSpliterator.forEachRemaining(LinkedList.java:1235)
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.openqa.selenium.remote.NewSessionPayload.validate(NewSessionPayload.java:215)
at org.openqa.selenium.remote.NewSessionPayload.<init>(NewSessionPayload.java:163)
at org.openqa.selenium.remote.NewSessionPayload.create(NewSessionPayload.java:118)
at org.openqa.grid.web.servlet.handler.WebDriverRequest.extractDesiredCapability(WebDriverRequest.java:66)
... 34 more
</pre>
<h3>Caused by:</h3><pre>org.openqa.grid.common.exception.GridException: Cannot extract a capabilities from the request: {
"desiredCapabilities": {
"appPackage": "comsdfsfionary",
"clearSystemFiles": true,
"uiautomator2ServerInstallTimeout": "6000",
"unlockKey": "pass",
"deviceId": "192.168.1.4:5555",
"deviceName": "SM_N950F",
"appActivity": "codsfsfdnActivity",
"platformVersion": "9",
"automationName": "uiautomator2",
"unlockType": "password",
"autoGrantPermissions": "true",
"platformName": "Android",
"systemPort": "8230"
},
"capabilities": {
"firstMatch": [
{
"appium:appActivity": "sdsf",
"appium:appPackage": "sfd",
"appium:autoGrantPermissions": "true",
"appium:automationName": "uiautomator2",
"appium:clearSystemFiles": true,
"deviceId": "192.168.1.4:5555",
"appium:deviceName": "SM_N950F",
"platformName": "android",
"appium:platformVersion": "9",
"appium:systemPort": "8230",
"uiautomator2ServerInstallTimeout": "6000",
"unlockKey": "pass",
"unlockType": "password"
}
]
}
Caused by: java.lang.IllegalArgumentException: Illegal key values seen in w3c capabilities: [deviceId, uiautomator2ServerInstallTimeout, unlockKey, unlockType]
at org.openqa.selenium.remote.NewSessionPayload.lambda$validate$6(NewSessionPayload.java:211)
at java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:372)
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$11$1.accept(ReferencePipeline.java:373)
org.openqa.grid.web.servlet.handler.WebDriverRequest.extractDesiredCapability(WebDriverRequest.java:66)
"http://eclipse.org/jetty">Powered by Jetty:// 9.4.7.v20170914</a><hr/>
________________________________________________________________
## TestNg xml file
>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite" thread-count="5" parallel="tests" verbose="2">
<test name="Note8">
<parameter name="deviceName" value="SM_N950F"/>
<parameter name="udid" value="988a1641434e36333130"/>
<parameter name="deviceId" value="192.168.1.4:5555"/>
<parameter name="platformVersion" value="9"/>
<parameter name="URL_" value="0.0.0.0"/>
<parameter name="Sport" value="5000"/>
<parameter name="bootStrap" value="4725"/>
<parameter name="sysPort" value="8230"/>
<parameter name="wdaPort" value="8230"/>
<parameter name="path" value="/users/amrka/desktop/selenium/note8.json"/>
<classes>
<class name="Tests.LandingPageTest"/>
</classes>
</test>
<test name="Note5">
<parameter name="deviceName" value="SM_N9208"/>
<parameter name="udid" value="0715f75124ea0934"/>
<parameter name="deviceId" value="192.168.1.9:5556"/>
<parameter name="platformVersion" value="7.0"/>
<parameter name="URL_" value="0.0.0.0"/>
<parameter name="Sport" value="5001"/>
<parameter name="bootStrap" value="4726"/>
<parameter name="sysPort" value="8240"/>
<parameter name="wdaPort" value="8240"/>
<parameter name="path" value="/users/amrka/desktop/selenium/note5.json"/>
<classes>
<class name="Tests.LandingPageTest"/>
</classes>
</test>
</suite>
>
________________________________________________________________
##BaseSetup class
`package Configuration;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import io.appium.java_client.service.local.flags.ServerArgument;
public class BaseSetup {
protected static AndroidDriver<MobileElement> driver = null;
protected AppiumDriverLocalService service;
public WebDriverWait wait;
private ThreadLocalDriver threadLocalDriver = new ThreadLocalDriver();
@Parameters({"deviceName","platformVersion","udid","URL_","Sport","deviceId","sysPort","bootStrap","wdaPort","path"})
@BeforeMethod(alwaysRun = true)
public void setUp (String deviceName, String platformVersion, String udid, String URL_, String Sport, String deviceId, String sysPort, String bootStrap, String wdaPort, String path) throws MalformedURLException {
System.out.println("Driver Is Initiated");
DesiredCapabilities dc = new DesiredCapabilities();
// mobile setup
dc.setCapability(MobileCapabilityType.DEVICE_NAME, deviceName);
dc.setCapability("deviceId", deviceId);
dc.setCapability("uiautomator2ServerInstallTimeout", "6000");
// dc.setCapability(MobileCapabilityType.UDID,udid_);
dc.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
dc.setCapability(MobileCapabilityType.PLATFORM_VERSION, platformVersion);
dc.setCapability(AndroidMobileCapabilityType.SYSTEM_PORT, sysPort);
dc.setCapability("unlockType", "password");
dc.setCapability("unlockKey", "pass");
dc.setCapability("automationName", "uiautomator2");
//application setup
dc.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "sdfd");
dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "dfd");
dc.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS,"true");
dc.setCapability(MobileCapabilityType.CLEAR_SYSTEM_FILES, true);
//driver configuration
int port = Integer.parseInt(Sport);
service = AppiumDriverLocalService
.buildService(new AppiumServiceBuilder()
.usingDriverExecutable(new File("/usr/local/bin/node"))
.withAppiumJS(new File("/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js"))
.withArgument(Arg.ADDRESS,URL_)
.withArgument(Arg.BootstrapPort,bootStrap)
.withArgument(Arg.SESSIONOVERRIDE)
.withArgument(Arg.CALLBACKPORT,Sport)
.withArgument(Arg.WDALOCALPORT,wdaPort)
.withArgument(Arg.NODECONFIG,path)
.usingPort(port));
service.start();
threadLocalDriver.setTLDriver(new AndroidDriver<MobileElement>(new URL("http://"+URL_+":"+"4444"+"/wd/hub"),dc));
driver = threadLocalDriver.getTLDriver();
wait = new WebDriverWait(driver, 10);
}
@AfterMethod
public synchronized void teardown(){
if (driver != null) {
driver.quit();
service.stop();
// }
}
}
}
`
##TestClass
`package Tests;
import org.testng.annotations.Test;
import Configuration.BaseSetup;
import Pages.LandingPage;
public class LandingPageTest extends BaseSetup {
@Test (priority = 1)
public void Verify_user_can_use_tourist_mode() {
LandingPage page = new LandingPage(driver);
page.sign_as_Tourist();
}
@Test (priority = 2)
public void Verify_user_can_use_local_mode() {
LandingPage page = new LandingPage(driver);
page.sign_as_Local();
}
}
`
## Node Config File
`{
"capabilities": [
{
"deviceName": "SM_N9208",
"platformName": "Android",
"deviceId": "192.168.1.9:5556",
"platformVersion": "7.0",
"maxInstances": 1
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://localhost:5001/wd/hub",
"host": "localhost",
"port": 5001,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}`