我尝试使用appium& amp ;;尝试在2台设备上运行并行测试selenium grid但由于某种原因它只在第一个节点服务器(和第一个设备)上运行,但在第二个服务器上没有任何事情发生。
此外,如果我关闭第一台服务器并运行测试,那么测试将在第二台服务器上运行,因此服务器不会出现任何问题。
为了将其设置为并行,我必须提供一些参数吗?
感谢您的帮助!
以下是我的文件:
第一个服务器json文件:
{
"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"
}
}
第二个服务器json文件:
{
"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"
}
}
运行selenium网格:
java -jar selenium-server.jar -role hub -port 4433
运行第一个场景
node.exe node_modules\appium\bin\appium.js --nodeconfig myfirstscenario.json -p 4490 -U 14b2b276 -bp 5490 --chromedriver-port 6490
运行第二种方案
node.exe node_modules\appium\bin\appium.js --nodeconfig mysecondscenario.json -p 4491 -U 04157df40862d02f -bp 5491 --chromedriver-port 6491
测试
@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();
}
答案 0 :(得分:0)
问题是因为您没有提供DesiredCapabilities中唯一的任何内容,也没有添加自定义的CapabilityMatcher。默认情况下,Grid仅使用browserName,version和platform来决定将测试路由到哪个节点。
这是解决问题的一种方法。将名为“applicationName”的新密钥添加到nodeConfig.json,并分别设置“OnePlusOne”和“SamsungS6”的值。然后,在测试中将所需的名为“applicationName”的新功能添加到所需的功能中,然后分别设置“OnePlusOne”和“SamsungS6”的值。在此之后,您的测试将被路由到正确的设备。
您可以在我的博文here中了解更多相关信息。
答案 1 :(得分:0)
我也面临同样的问题,但已经通过
解决了步骤1:在环境变量中添加appium(.. \ Appium \ node_modules.bin) 第2步:为每个节点制作差异json。
节点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" } }
节点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"
}
}
现在要运行集线器,我已经在批处理文件中进行了
java -jar %cd%\selenium-server-standalone-2.52.0.jar -role hub http://127.0.0.1:4444/grid/console
和
for node1
appium -a 127.0.0.1 -p 4723 --no-reset --bootstrap-port 4728 -U 192.168.56.101:5555 --nodeconfig %cd%\5555appium1.json
和节点2
appium -a 127.0.0.1 -p 4733 --no-reset --bootstrap-port 4738 -U 4d00af03525c80a1 --nodeconfig %cd%\4d00appium2.json
并在您的代码中添加deviceName:'您的设备名称来自add设备cmd'
这对我有用。