Подскажите пожалуйста, сталкивался кто-то с подобной связкой? В Appium немного сложно работать с элементами и ожиданиями, решил попробовать, может с Selenide будет проще. Реально ли это вообще? К примеру, хочу открыть приложение на главном скрине по имени (пример: SomeApps, допустим приложение надо открыть на скрине не через активити, а просто тапнуть по иконке с таким именем), а оно мне фаерфокс открывает
Скорее всего надо какуе-то обертку над драйвером сделать… Немного моего кода:
DriverSetup
package autoTests.apps.components;
import autoTests.apps.properties.PropertyLoader;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
public class DriverSetup {
private static final Logger logger = LogManager.getLogger(DriverSetup.class);
private static DriverSetup _instance = null;
private AndroidDriver driver;
private WebDriverWait wait;
private URL serverUrl;
public int EXPLICIT_WAIT_TIME;
public int DEFAULT_WAIT_TIME;
public int IMPLICIT_WAIT_TIME;
public String WAIT_ACTIVITY;
public String APPIUM_PORT;
public String NEW_COMMAND_TIMEOUT;
public String DEVICE_READY_TIMEOUT;
public String DEVICE_NAME;
public String BROWSER_NAME;
public String PLATFORM_VERSION;
public String PLATFORM_NAME;
public String APP_PKG;
public String APP_ACTIVITY;
public String AUTOMATION_INSTRUMENTATION;
public String APPLICATION_NAME;
public String PERFORMANCE_LOGGING;
private DesiredCapabilities capabilities = new DesiredCapabilities();
private Properties prop = new Properties();
public DriverSetup() {
this.loadConfigProp();
this.setCapabilities();
try {
serverUrl = new URL("http://127.0.0.1:" + APPIUM_PORT + "/wd/hub");
} catch (MalformedURLException e) {
e.printStackTrace();
logger.error(e);
}
driver = new AndroidDriver(serverUrl, capabilities);
wait = new WebDriverWait(driver, EXPLICIT_WAIT_TIME);
driver.manage().timeouts().implicitlyWait(DEFAULT_WAIT_TIME, TimeUnit.SECONDS);
}
public static DriverSetup getInstance() {
if (_instance == null) {
_instance = new DriverSetup();
}
return _instance;
}
public AndroidDriver getDriver() {
return driver;
}
public WebDriverWait getWait() {
return wait;
}
public void loadConfigProp() {
EXPLICIT_WAIT_TIME = Integer.parseInt(PropertyLoader.loadProperty("explicitWait"));
DEFAULT_WAIT_TIME = Integer.parseInt(PropertyLoader.loadProperty("defaultWait"));
IMPLICIT_WAIT_TIME = Integer.parseInt(PropertyLoader.loadProperty("implicitWait"));
WAIT_ACTIVITY = PropertyLoader.loadProperty("waitActivity");
APPIUM_PORT = PropertyLoader.loadProperty("appiumServerPort");
NEW_COMMAND_TIMEOUT = PropertyLoader.loadProperty("newCommandTimeout");
DEVICE_READY_TIMEOUT = PropertyLoader.loadProperty("deviceReadyTimeout");
DEVICE_NAME = PropertyLoader.loadProperty("deviceName");
BROWSER_NAME = PropertyLoader.loadProperty("browserName");
PLATFORM_VERSION = PropertyLoader.loadProperty("platformVersion");
PLATFORM_NAME = PropertyLoader.loadProperty("platformName");
APP_PKG = PropertyLoader.loadProperty("applicationPackage");
APP_ACTIVITY = PropertyLoader.loadProperty("applicationActivity");
AUTOMATION_INSTRUMENTATION = PropertyLoader.loadProperty("automationInstumentation");
APPLICATION_NAME = PropertyLoader.loadProperty("applicationPath");
//PERFORMANCE_LOGGING = PropertyLoader.loadProperty("enablePerformanceLogging");
}
public void setCapabilities() {
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, DEVICE_NAME);
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, BROWSER_NAME);
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, PLATFORM_VERSION);
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, PLATFORM_NAME);
capabilities.setCapability(MobileCapabilityType.APP_PACKAGE, APP_PKG);
if (prop.containsKey("waitActivity")) {
capabilities.setCapability(MobileCapabilityType.APP_WAIT_ACTIVITY, WAIT_ACTIVITY);
} else {
capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, APP_ACTIVITY);
}
//if (!APPLICATION_NAME.isEmpty()) {
// capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AUTOMATION_INSTRUMENTATION);
// capabilities.setCapability(MobileCapabilityType.APP, new File(
// ClassLoader.getSystemResource(APPLICATION_NAME).getFile()).getAbsolutePath());
//}
capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, NEW_COMMAND_TIMEOUT);
capabilities.setCapability(MobileCapabilityType.DEVICE_READY_TIMEOUT, DEVICE_READY_TIMEOUT);
//capabilities.setCapability("unicodeKeyboard", true);
}
часть Application Manager
public class ApplicationManager {
public AndroidDriver driver;
public WebDriverWait wait;
public ApplicationManager() {
driver = DriverSetup.getInstance().getDriver();
wait = DriverSetup.getInstance().getWait();
}