Здравствуйте, у меня очень странная проблема с параллельным выполнением Appium для 2 устройств
Что у меня есть:
- android device1
- android device2
- Два узла сетки селена с разными серверами Appium (и я пытаюсь сделать то же самое, но с одним сервером Appium, но с двумя разными системными портами)
Каждый раз, когда я запускаю тесты параллельно, запускаются 2 потокаодно и то же устройство (вместо двух) и мой тест вылетает.
мой код:
testng.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="BDD Test Suite" verbose="1" parallel="tests" thread-count="2">
<test name="Honor 8">
<parameter name="platformName" value="Android"/>
<parameter name="deviceName" value="HUAWEI1"/>
<parameter name="platformVersion" value="7"/>
<parameter name="udid" value="value1"/>
<parameter name="port" value="4740"/>
<parameter name="systemPort" value="8201"/>
<classes>
<class name="global.APP.starter.TestExample"/>
</classes>
</test>
<test name="Honor 10">
<parameter name="platformName" value="Android"/>
<parameter name="deviceName" value="HUAWEI2"/>
<parameter name="platformVersion" value="9"/>
<parameter name="udid" value="value2"/>
<parameter name="port" value="4750"/>
<parameter name="systemPort" value="8200"/>
<classes>
<class name="global.APP.starter.TestExample"/>
</classes>
</test>
</suite>
TestExample:
package global.APP.starter;
import global.Drivers;
import org.testng.annotations.*;
public class TestExample {
public Drivers drv = new Drivers();
@Parameters({"platformName","deviceName","platformVersion","udid","port","systemPort"})
@Test
public void testLoginAndLogout(String platformName, String deviceName, String platformVersion, String udid, String port, String systemPort) throws Exception{
drv.MultipleDriver(platformName, deviceName, platformVersion, udid, port, systemPort);
}
@AfterMethod
public void treadDown(){
drv.closeDriver();
}
}
Drivers.java
import com.codeborne.selenide.WebDriverRunner;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
public class Drivers {
public static AppiumDriver<WebElement> driver;
public static DesiredCapabilities cap;
public AppiumDriver MultipleDriver(String platformName, String deviceName,
String platformVersion, String udid,
String port, String systemPort) throws MalformedURLException {
cap = new DesiredCapabilities();
if (platformName.equals("iOS")) {
cap.setCapability("platformVersion", platformVersion);
cap.setCapability("bundleId", "com.app.app");
cap.setCapability("platformName",platformName);
cap.setCapability("deviceName", deviceName);
cap.setCapability("udid", udid);
}
if (platformName.equals("Android")) {
cap.setCapability("app", "/Users/usr/Desktop/app/app.apk");
cap.setCapability("platformName",platformName);
cap.setCapability("deviceName", deviceName);
cap.setCapability("udid", udid);
cap.setCapability(AndroidMobileCapabilityType.SYSTEM_PORT, systemPort);
cap.setCapability("automationName", "UiAutomator2");
}
cap.setCapability("noReset", true);
cap.setCapability("fullReset", false);
if (platformName.equals("iOS"))
driver = new IOSDriver<WebElement>(new URL("http://0.0.0.0:" + port + "/wd/hub"), cap);
else if(platformName.equals("Android"))
driver = new AndroidDriver<WebElement>(new URL("http://0.0.0.0:" + port + "/wd/hub"), cap);
Assert.assertNotNull(driver);
WebDriverRunner.setWebDriver(driver);
return driver;
}
public static AppiumDriver getDriver() {
return driver;
}
public void closeDriver(){
driver.quit();
}
}
Пожалуйста, дайте мне знать, что неправильно делается в моем коде.