android - capabilities - appium webdriver
prueba paralela con grilla de appium y selenio (2)
El problema se debe a que ni ha proporcionado nada que sea único en sus Capacidades Deseadas ni ha agregado un CapabilityMatcher personalizado. Por defecto, la Grilla solo usa el browserName, la versión y la plataforma para decidir a qué nodo debe enrutarse una prueba.
Aquí hay una forma de solucionar el problema. Agregue una nueva clave llamada "nombre de aplicación" a su nodeConfig.json y establezca los valores de "OnePlusOne" y "SamsungS6", respectivamente. A continuación, agregue una nueva capacidad denominada "nombre de aplicación" a su capacidad deseada en su prueba y luego establezca el valor de "OnePlusOne" y "SamsungS6", respectivamente. Después de esto, su prueba se enrutará al dispositivo correcto.
Puedes leer más sobre esto en mi blog aquí .
Estoy intentando ejecutar pruebas en paralelo en 2 dispositivos que usan la red Appium & Selenium, pero por alguna razón solo se ejecuta en el primer servidor de nodo (y primer dispositivo) pero no ocurre nada en el segundo servidor.
Además, si cierro el primer servidor y ejecuto la prueba, la prueba se ejecutará en el segundo servidor, por lo que no debería haber ningún problema con los servidores.
¿Hay algún parámetro que deba dar para configurarlo en paralelo?
Gracias por la ayuda !
Aquí están mis archivos:
Primer archivo json del servidor:
{
"capabilities":
[
{
"browserName": "SamsungS6",
"deviceName": "04157df40862d02f",
"version":"6.0.1",
"maxInstances": 3,
"platform":"ANDROID"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://localhost:4491/wd/hub",
"host": "localhost",
"port": 4491,
"maxSession": 5,
"register": true,
"registerCycle": 5000,
"hubPort": 4433,
"hubHost": "localhost"
}
}
Segundo archivo json del servidor:
{
"capabilities":
[
{
"browserName": "OnePlusOne",
"deviceName": "14b2b276",
"version":"6.0.1",
"maxInstances": 3,
"platform":"ANDROID",
"platformName":"ANDROID"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://localhost:4490/wd/hub",
"host": "localhost",
"port": 4490,
"maxSession": 5,
"register": true,
"registerCycle": 5000,
"hubPort": 4433,
"hubHost": "localhost"
}
}
Ejecute la grilla de selenio:
java -jar selenium-server.jar -role hub -port 4433
Ejecuta el primer escenario
node.exe node_modules/appium/bin/appium.js --nodeconfig myfirstscenario.json -p 4490 -U 14b2b276 -bp 5490 --chromedriver-port 6490
Ejecutar segundo escenario
node.exe node_modules/appium/bin/appium.js --nodeconfig mysecondscenario.json -p 4491 -U 04157df40862d02f -bp 5491 --chromedriver-port 6491
La prueba
@BeforeTest(alwaysRun = true)
public void setUp(){
try {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "ANDROID");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "");
capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, appPackage);
capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, appActivity);
driver = new AndroidDriver(new URL("http://localhost:4433/wd/hub"), capabilities);
new WebDriverWait(driver, 60);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@Test
public void test(){
System.out.println("hello world");
try {
sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@AfterTest(alwaysRun = true)
public void closeDriver(){
driver.quit();
}
También me enfrenté al mismo problema pero me resolvió
Paso 1: agregue el appium (.. / Appium / node_modules.bin) en su variable de entorno Paso 2: haga la diferencia para cada nodo.
para el nodo 1
{ "capabilities":
[
{
"version":"6.0",
"maxInstances": 1,
"platform":"ANDROID",
"newCommandTimeout":"30",
"deviceReadyTimeout":5
}
], "configuration": {
"cleanUpCycle":2000,
"timeout":10800,
"url":"http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1" } }
para el nodo 2
{
"capabilities":
[
{
"version":"5.0.2",
"maxInstances": 1,
"platform":"ANDROID",
"newCommandTimeout":"30",
"deviceReadyTimeout":5
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":10800,
"url":"http://127.0.0.1:4733/wd/hub",
"host": "127.0.0.1",
"port": 4733,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}
ahora para ejecutar el hub he hecho eso en un archivo por lotes
java -jar %cd%/selenium-server-standalone-2.52.0.jar -role hub http://127.0.0.1:4444/grid/console
y
para node1
appium -a 127.0.0.1 -p 4723 --no-reset --bootstrap-port 4728 -U 192.168.56.101:5555 --nodeconfig %cd%/5555appium1.json
y nodo 2
appium -a 127.0.0.1 -p 4733 --no-reset --bootstrap-port 4738 -U 4d00af03525c80a1 --nodeconfig %cd%/4d00appium2.json
y en su código agregue el deviceName: ''el nombre de su dispositivo que viene en los dispositivos adb en cmd''
Esto realmente funcionó para mí.