This site is in read only mode. Please continue to browse, but replying, likes, and other actions are disabled for now.
121 / 169
Jul 2015

Anyone any solution for my issue? Tried a lot different things with no success

WORKING GREAT with Caveats!!

Finally, I was able to achieve what I need. To rephrase, this is my setup:

Selenium Grid Hub: Running on iMac with Yosemite/Maveicks (Also tried with Windows 10 Preview using Bootcamp). Source for the test scripts are on the hub and NOT on each of the nodes. This is very important as I wanted to have the source in one single location for getting latest from SVN.

Selenium Grid Node: Running on MacBook Air:
Connected 2 devices (iPhone 6+ and Samsung Note II). Each of the devices are running on different appium ports. Selenium grid node are instantiated on each of the ports appium is listening (more on this later).

For debugging purposes, I installed IntelliJ on the hub machine (iMac) and when the test cases start running, I was seeing parallel run on both the devices at the same time (on the node machine). So far so good. I did the same with Windows 10 Preview (on the hub) and it works extremely well too. So, Windows hub can talk to Mac nodes. Awesome!

Now, the issue: I wanted to see if it works with Windows node. I disconnected the Android device (Samsung Note II) and plugged in to Windows 7 laptop while the hub is running on Windows 10 Preview (I think Windows OS shouldn't matter here). When I ran the test case from the hub on Windows 10 Preview, at the line where the AndroidDriver is instantiated, I got a Internet Explorer Driver error asking me to set this: System.setProperty("webdriver.ie.driver", "C:\SeleniumDrivers\IEDriverServer.exe");

I did this on both the server and the node (both running on Windows OS). Then, I got one more new error:
org.openqa.selenium.WebDriverException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones. (WARNING: The server did not provide any stacktrace information).

My first question is I'm at loss on why these errors about Internet Explorer are happening when I'm trying to run an Android native app on the phone connected to a node remotely. These kind of issues are not happening when both the hub and the node are on OS X and also when the hub is on Windows 10 Preview and the node is on OS X. These pesky errors only happen when both the hub and node are on Windows OS. I haven't tried where the hub is on OS X and the node is on Windows 7.

And here's the snippet that I'm using to instantiate appium servers and grid nodes on the node machine:
C:\Program Files\nodejs>node C:\Users\username\AppData\Roaming\npm\node_mod
ules\appium\bin\appium.js --port 6000 --bootstrap-port 6025 --udid "android device id" --app-pkg "android package name" --app-activity "android activity name"

C:\Automation\Server>java -jar selenium-server-standalone.jar -role node -browse
r browserName=Android,version=4.3,maxinstance=1,platform=WINDOWS,applicationName
="udid" -Dwebdriver.ie.driver=C:\WebDrivers\IEDriverServer.exe -hub http://hubip:4444/grid/register3 -port 6000

I have to add the -Dwebdriver.ie.driver to make the nasty InternetExplorer Driver location failure to go away. Still getting the protected zone error.

Puzzled on why all of these when I'm trying to run a native android app on and android phone connected to a Windows OS node.
Btw, is the browsername correct? I'm just automating a native iPhone and a Android app.

Anybody, with any thoughts?

Thanks.

1 month later

Is there anything for python like TestNG? i have configured everything, my only problem is how to run parallel Tests, any help will be good.

All examples using the .xml file are for Java, i want to know if there is something like that for python.

Thanks

21 days later

Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: The following desired capabilities are required, but were not provided: deviceName)","origValue":"The following desired capabilities are required, but were not provided: deviceName"},"sessionId":null}

config files as below:
File 1:
{
"capabilities":
[
{
"browserName":"android",
"version":"4.4.2",
"maxInstances":5,
"platform":"ANDROID",
"applicationName": "2636B827AA05E6BB3"
}
],
"configuration":
{
"nodeTimeout":120,
"cleanUpCycle":2000,
"timeout":10000,
"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:5566/wd/hub",
"maxSession":2,
"port":5566,
"register":true,
"registerCycle":5000,
"hub": "127.0.0.1:4441/grid/register",
"hubPort": 4441,
"hubHost": "127.0.0.1",
"role":"node"
}
}

File 2:
{
"capabilities":
[
{
"browserName":"android",
"version":"4.4",
"maxInstances":5,
"platform":"ANDROID",
"applicationName": "3061755BF088DF45"
}
],
"configuration":
{
"nodeTimeout":120,
"cleanUpCycle":2000,
"timeout":10000,
"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:5577/wd/hub",
"maxSession":2,
"port":5577,
"register":true,
"registerCycle": 5000,
"hub": "127.0.0.1:4441/grid/register",
"hubPort": 4441,
"hubHost": "127.0.0.1",
"role":"node"
}
}

Selenium code:
for node 1:

@Parameters(value={"device_id1","device_id2", "ApplicationPath"})
@BeforeSuite//The annotated method will be run before all tests in this suite have run.
public static void atStart(@Optional("nnn") String device_id1, String device_id2, String ApplicationPath) throws InterruptedException, IOException
{
File app = new File(ApplicationPath);
capabilities=new DesiredCapabilities();
capabilities=DesiredCapabilities.android();

        if ("2636B827AA05E6BB3".equals(device_id1))//FOR SAMSUNG GALAXY NOTE
        {
            System.out.println("in Samsung galaxy: "+device_id1);
            capabilities.setCapability("automationName", "Appium");
            capabilities.setCapability(CapabilityType.BROWSER_NAME, "android");
            //capabilities.setCapability("crazyNodeName", "One");

            //samsung-sm_n750-3204da2a5075c0b5//micromax-micromax_a311-8a2d363//samsung-nexus_s-30345C56DC2000EC
            capabilities.setCapability("applicationName", device_id1);
            capabilities.setCapability("udid", device_id1);
            capabilities.setCapability("deviceName","samsung-nexus_s-30345C56DC2000EC");//
            capabilities.setCapability("platformVersion", "4.4.2");//Or//capabilities.setCapability(CapabilityType.VERSION, "4.1.2");
            capabilities.setCapability(CapabilityType.PLATFORM,"ANDROID");
            capabilities.setCapability("platformName", "ANDROID");//Or//capabilities.setCapability(CapabilityType.PLATFORM, "Android");
            capabilities.setCapability("app", app.getAbsolutePath());
            capabilities.setCapability("appPackage", "com.avaamo.android.staging"); //Replace with your app's package
            capabilities.setCapability("appActivity", "com.avaamo.android.ui.LandingActivity"); //Replace with app's Activity
            //setting new command timeout for selenium server
            capabilities.setCapability("newCommandTimeout", "2000000");//33.33 mins

                try
                {
                    driver = new AndroidDriver(new URL("http://127.0.0.1:4441/wd/hub"), capabilities);
                }
                catch (Exception e)
                {
                    System.out.println("didnt work for !" +device_id1);
                }

}

:: The same code with some values change for node 2.

Can anyone please help understanding whats going wrong, or possible solution?

@Hassan_Radi @appium @appium_ia @Arvind_Patel

I have added deviceName in json files and have put the same in capabilities in script.
though I don't see any progress.

@Hassan_Radi
Thanks ! The error does not exist now.

@jonahss @Hassan_Radi @Arvind_Patel @rgonalo @Appium_Master @appium_ia
What happens now is:
App is installed on both the devices but executes the script 2 times in one device one after another.

Following are the json files:
for node 1:
{
"capabilities":
[
{
"browserName":"android",
"deviceName": "SM-N750",
"version":"4.4.2",
"maxInstances":5,
"platform":"ANDROID",
"applicationName": "3204da2a5075c0b5"
}
],
"configuration":
{
"nodeTimeout":120,
"cleanUpCycle":2000,
"timeout":10000,
"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://xxxx:5566/wd/hub",
"maxSession":1,
"port":5566,
"register":true,
"registerCycle":5000,
"hub": "xxxx:4441/grid/register",
"hubPort": 4441,
"hubHost": "xxxx",
"role":"node"
}
}

Node 2:
{
"capabilities":
[
{
"browserName":"android",
"version":"4.4.2",
"maxInstances":5,
"platform":"ANDROID",
"applicationName": "0123456789ABCDEF",
"deviceName": "Micromax A107"
}
],
"configuration":
{
"nodeTimeout":120,
"cleanUpCycle":2000,
"timeout":10000,
"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://xxxx:5577/wd/hub",
"maxSession":1,
"port":5577,
"register":true,
"registerCycle": 5000,
"hub": "xxxx:4441/grid/register",
"hubPort": 4441,
"hubHost": "xxxx",
"role":"node"
}
}

Hub json:
{
"throwOnCapabilityNotPresent":true,
"host":"xxxx",
"port":4441,
"newSessionWaitTimeout":-1,
"servlets" :[],
"prioritizer":null,
"capabilityMatcher":"org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent":true,
"nodePolling":5000,

"cleanUpCycle":5000,
"timeout":300000,
"browserTimeout":0,
"maxSession":5,
"jettyMaxThreads":-1
}

Following is the code:
public class abc{

WebDriver driver = null;
DesiredCapabilities capabilities = new DesiredCapabilities();

@Parameters(value={"device_id1","device_id2","ApplicationPath"})
@BeforeTest
public void atStart(@Optional("nnn")String device_id1,String device_id2, String ApplicationPath) throws MalformedURLException, InterruptedException
{    

    capabilities=DesiredCapabilities.android();

    capabilities.setCapability("automationName", "Appium");
    capabilities.setCapability(CapabilityType.BROWSER_NAME,"android");
    capabilities.setCapability("platformVersion", "4.4.2");
    capabilities.setCapability(CapabilityType.PLATFORM,"ANDROID");
    capabilities.setCapability("platformName","ANDROID");
    capabilities.setCapability("app", ApplicationPath);
    capabilities.setCapability("appPackage", "com.avaamo.android.staging"); //Replace with your app's package
    capabilities.setCapability("appActivity", "com.avaamo.android.ui.TabActivity"); //Replace with app's Activity
    //setting new command timeout for selenium server
    capabilities.setCapability("newCommandTimeout", "2000000");//33.33 mins

    if("8a2d363".equalsIgnoreCase(device_id2))
    {
        System.out.println("in nexus: "+device_id2);
        //
        capabilities.setCapability("applicationName",device_id2);
        capabilities.setCapability("udid",device_id2);
        capabilities.setCapability("deviceName","Micromax A311");
    }

    if ("3204da2a5075c0b5".equalsIgnoreCase(device_id1))
    {
        System.out.println("in Samsung galaxy: "+device_id1);
        //
        capabilities.setCapability("applicationName", device_id1);
        capabilities.setCapability("udid", device_id1);
        capabilities.setCapability("deviceName","SM-N750");
    }

    try
    {
        driver = new AndroidDriver(new URL("http://xxxx:4441/wd/hub"), capabilities);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

Could anyone please help? :smiley:

Hi,

I am able to launch app on different devices but script runs on one only.
As it is parametrized from testng.xml, it is executed on single device 2 times.
It means it is executing the script that should ideally be executed on another device.
Please find details for node and script on comment no 123.
+ I am creating 2 driver instances.

Looking forward.

Hi @vijayakarthikeyan

Were you able to run the script on 2 devices?
Can please you share the script and node and hub js files?

I am able to install and launch the app on 2 devices but script is executed only on one.
I have not created 2 instances of webDriver.

Looking forward for help.
Thanks in Advance ! :wink:

17 days later

Hi All,

Please tell me any one, how get list of iPhone device s which are connected to Mac machine using Java code. This is really helpful for me.
Thanks in advance.

19 days later

Hello,

There is a command that displays the list of device:
xcrun instruments -s device
You can execute this command through Java Code and then parse the response.

Hope it helps.

1 month later

@Arvind_Patel
Can you please provide me exact steps to set up selenium grid. I want it from scratch.
I would like to know on how to run these json files, where to add them and all. Could you please help me with the same.

8 days later

Needed help
@Arvind_Patel @Hassan_Radi

My json files are:

node1.json

{
"capabilities":
[
{
"browserName": "Android",
"version”:”5.0.2”,
"maxInstances": 3,
"platform":"ANDROID",
"deviceName”:”X1033”
}
],
"configuration":
{
"nodeTimeout":120,
"port":4723,
"hubPort":4444,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:4723/wd/hub",
"hub": "127.0.0.1:4444/grid/register",
"hubHost":"127.0.0.1",
"nodePolling":2000,
"registerCycle":10000,
"register":true,
"cleanUpCycle":2000,
"timeout":30000,
"maxSession":1
}
}

node2.json

{
"capabilities":
[
{
"browserName": "Android",
"version":"5.1",
"maxInstances": 3,
"platform":"ANDROID",
"deviceName”:”X1033”
}
],
"configuration":
{
"nodeTimeout":120,
"port":4728,
"hubPort":4444,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:4728/wd/hub",
"hub": "127.0.0.1:4444/grid/register",
"hubHost":"127.0.0.1",
"nodePolling":2000,
"registerCycle":10000,
"register":true,
"cleanUpCycle":2000,
"timeout":30000,
"maxSession":1
}
}

Opened 2 appium on ports 4723 & 4728

Started grid on mac with command:

java -jar selenium-server-standalone-2.48.2.jar -role hub

starting node with command:

java -jar selenium-server-standalone-2.48.2.jar -role node -hub http://localhost:4444/grid/register10 —port 4723 -nodeConfig node1.json

getting ERROR:

Mac-mini:jar intelligrape$ java -jar selenium-server-standalone-2.48.2.jar -role node -hub http://localhost:4444/grid/register10 —port 4723 -nodeConfig node1.json
16:16:30.700 INFO - Launching a Selenium Grid node
Error building the config :Error with the JSON of the config : Wrong format for the JSON input : com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
Usage: java -jar selenium-server.jar -role node [options]

-host:
: usually not needed and determined
automatically. For exotic network configuration, network with
VPN, specifying the host might be necessary.

-port:
: the port the remote/hub will listen on. Default to 4444.

-cleanupCycle:
in ms. How often a proxy will check for timed out thread.

-timeout:
the timeout in seconds before the hub automatically ends
a test that hasn't had any activity in the last X seconds. The
browser will be released for another test to use. This typically
takes care of the client crashes.

-browserTimeout:
The timeout in seconds a browser can hang

-hub:
http://localhost:4444/grid/register10 : the url that will be used
to post the registration request. This option takes precedence
over -hubHost and -hubPort options.

-hubHost:
: the host address of a hub the registration
request should be sent to. Default to localhost. Option -hub
takes precedence over this option.

-hubPort:
: the port listened by a hub the registration request
should be sent to. Default to 4444. Option -hub takes precedence
over this option.

-proxy:
the class that will be used to represent the node. By default
org.openqa.grid.selenium.proxy.DefaultRemoteProxy.

-maxSession:
max number of tests that can run at the same time on the node,
independently of the browser used.

-registerCycle:
how often in ms the node will try to register itself again.Allow
to restart the hub without having to restart the nodes.

-nodePolling:
in ms. Interval between alive checks of node how often the hub
checks if the node is still alive.

-unregisterIfStillDownAfter:
in ms. If the node remains down for more than
unregisterIfStillDownAfter millisec, it will disappear from the
hub.Default is 1min.

-downPollingLimit:
node is marked as down after downPollingLimit alive checks.

-nodeStatusCheckTimeout:
in ms. Connection and socket timeout which is used for node alive
check.

This synopsis lists options available in node role only. To get help
on the command line options available for other roles run the server
with -help name and the corresponding -role name value.
org.openqa.grid.common.exception.GridConfigurationException: Error with the JSON of the config : Wrong format for the JSON input : com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
at org.openqa.grid.common.RegistrationRequest.loadFromJSON(RegistrationRequest.java:574)
at org.openqa.grid.common.RegistrationRequest.build(RegistrationRequest.java:378)
at org.openqa.grid.selenium.GridLauncher.main(GridLauncher.java:83)
Caused by: org.openqa.grid.common.exception.GridConfigurationException: Wrong format for the JSON input : com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
at org.openqa.grid.common.JSONConfigurationUtils.loadJSON(JSONConfigurationUtils.java:81)
at org.openqa.grid.common.RegistrationRequest.loadFromJSON(RegistrationRequest.java:550)
... 2 more
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
at com.google.gson.internal.Streams.parse(Streams.java:56)
at com.google.gson.JsonParser.parse(JsonParser.java:84)
at com.google.gson.JsonParser.parse(JsonParser.java:59)
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at org.openqa.grid.common.JSONConfigurationUtils.loadJSON(JSONConfigurationUtils.java:79)
... 3 more
Caused by: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1573)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:517)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:418)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:666)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
at com.google.gson.internal.Streams.parse(Streams.java:44)
... 7 more