У меня есть тестовый пример, где в iPhone мне нужно
1. Выполните задачу в приложении А.
2. Переключитесь в браузер Safari и выполните задачу
3. Снова переключитесь в приложение A и продолжите другие задачи
В настоящее время я могу выполнить 1 и 2 и затем переключиться обратно в приложение A, но не могу выполнить никаких задач в приложении A после переключения из браузера Safari. Я сделал следующее.
Прежде всего, чтобы запустить приложение A, я использовал следующий код
public void createAppiumDriver() throws MalformedURLException, InterruptedException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "iPhone 7 Plus");
capabilities.setCapability("platformName", "iOS");
capabilities.setCapability("platformVersion", "11.2");
capabilities.setCapability("autoWebView", true);
capabilities.setCapability("app", getProperties().getProperty("appURL"));
capabilities.setCapability("autoAcceptAlerts", true);
capabilities.setCapability("useNewWDA", true);
capabilities.setCapability("startIWDP",true);
iosDriver = new IOSDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);}
Чтобы переключиться с моего приложения на Safari, я начал новый сеанс, используя следующий код для переключения на Safari
public void openSafari() throws MalformedURLException {
DesiredCapabilities capabilities2 = new DesiredCapabilities();
capabilities2.setCapability("deviceName", "iPhone 7 Plus");
capabilities2.setCapability("platformName", "iOS");
capabilities2.setCapability("platformVersion", "11.2");
capabilities2.setCapability("browserName", "Safari");
capabilities2.setCapability("autoAcceptAlerts", true);
capabilities2.setCapability("useNewWDA", true);
iosDriver2 = new IOSDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities2);
iosDriver2.get("https://www.gmail.com");}
Проблема, с которой я столкнулся, состоит в том, чтобы снова переключиться на приложение A из браузера Safari, чтобы выполнить некоторые задачи, для которых в данный момент я снова создал новую сессию, как показано ниже
public void switchToNutrifix() throws MalformedURLException, InterruptedException {
DesiredCapabilities capabilities3 = new DesiredCapabilities();
capabilities3.setCapability("deviceName", "iPhone 7 Plus");
capabilities3.setCapability("platformName", "iOS");
capabilities3.setCapability("platformVersion", "11.2"); //Replace this with your iOS version
capabilities3.setCapability("autoWebView", true);
capabilities3.setCapability("app", getProperties().getProperty("appURL"));
capabilities3.setCapability("autoAcceptAlerts", true);
capabilities3.setCapability("useNewWDA", true);
capabilities3.setCapability("startIWDP",true);
iosDriver3 = new IOSDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities3);}
Проблема теперь в том, что приложение A снова открывается из Safari, но оно не может идентифицировать элементы в приложении. Я даже правильно изменил контекст на веб-просмотр, но все равно он не может выполнять никаких задач в приложении А после переключения из браузера Safari. Может кто-нибудь, пожалуйста, скажите мне, что я делаю не так, здесь или другой альтернативный способ сделать это переключение.
Я обычно получаю ошибку
May 09, 2018 6:43:42 PM org.openqa.selenium.support.ui.ExpectedConditions findElement
WARNING: WebDriverException thrown by findElement(By.xpath: //div[@class='login-content purpose']/h2)
org.openqa.selenium.remote.SessionNotFoundException: A session is either terminated or not started (WARNING: The server did not provide any stacktrace information)
и отображение журналов appium
debug] [iOS] No key id found. Choosing first id from page array
[debug] [iOS] Page change not referring to currently selected app, ignoring.