Как переключаться с одного приложения на другое во время выполнения

Есть ли возможность переключаться с одного приложения на другое во время выполнения с помощью Appium.

Спасибо


person Sravan    schedule 28.03.2014    source источник


Ответы (4)


Наконец-то я нашел точный ответ, может кому-нибудь пригодится

источник https://www.linkedin.com/grp/post/6669152-6027319885992841219?trk=groups-post-b-title

 // App1 capabilities
 String calculatorAppPackageName="com.android.calculator2";
 String calculatorAppActivityName="com.android.calculator2.Calculator";

// App2 capabilities
 String settingsAppPackageName="com.android.settings";
 String settingsAppActivityName="com.android.settings.Settings";

 @Before
 public void setUp() throws MalformedURLException
 {
        DesiredCapabilities capabilities = DesiredCapabilities.android();
        capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");
        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "192.168.215.101:5555");
        capabilities.setCapability(MobileCapabilityType.APP_PACKAGE, calculatorAppPackageName);
        capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, calculatorAppActivityName);
        driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

 }

 @Test
    public void testApp() throws InterruptedException, MalformedURLException
    {
        //Perform calculation in calculator
        driver.findElement(By.name("4")).click();
        driver.findElement(By.name("×")).click();
        driver.findElement(By.name("3")).click();
        driver.findElement(By.name("=")).click();

        //launch settings App
        driver.startActivity(settingsAppPackageName, settingsAppActivityName);

        //Switch OFF WIFI
        driver.findElement(By.id("com.android.settings:id/switchWidget")).click();

        //Re launch calculator App
        driver.startActivity(calculatorAppPackageName, calculatorAppActivityName);

        //Validate results
        String result = driver.findElement(By.className("android.widget.EditText")).getText();
        System.out.println("Result : " + result);
        Assert.assertEquals("Incorrect Result", "12", result);
    }
person Sravan    schedule 23.07.2015
comment
Есть ли способ добиться этого в iOS? - person anavarroma; 05.08.2015
comment
Просто обновление команды - driver.startActivity(settingsAppPackageName, settingsAppActivityName); Теперь это изменилось, новый способ выполнения startActivity: driver.startActivity(new Activity(settingsAppPackageName, settingsAppActivityName)); - person Sam; 17.07.2019

Вы можете изменить приложения, повторно создав веб-драйвер с атрибутами нового приложения.

driver = webdriver.Remote(appiumUrl,dcapabilityApp1)
[Your tests]
driver = webdriver.Remote(appiumUrl,dcapabilityApp2)
[New app tests]

Пока вы не закроете/отключите эмулятор/симулятор/устройство, ваши пользовательские данные будут сохранены.

person jkbz    schedule 25.06.2014
comment
Привет, jkbz, спасибо за ответ :) Я работаю с JAVA API, есть ли у вас какие-либо идеи, эквивалентные Java webdriver.Remote, нам нужно изменить номер порта appium для нового экземпляра driver = webdriver.Remote (appiumUrl, dcapabilityApp2 [New тесты приложений] - person Sravan; 25.06.2014
comment
Вам не нужно менять порт; appiumUrl (выше) включает IP-адрес и порт. - person jkbz; 25.06.2014
comment
Спасибо jkbz за ответ. В рамках второго шага я могу запустить то, что уже установлено на устройстве, я имею в виду, что у меня нет файла .app или .ipa для этого приложения, но оно установлено. заранее спасибо - person Changdeo Jadhav; 30.06.2014
comment
@ChangdeoJadhav — вы можете использовать appium для доступа к любым приложениям (предварительно установленным или родным), если у вас есть идентификаторы приложений (идентификатор пакета, активность приложения) и т. д. Лично я использую appium только для установки приложений, если мне нужно (iOS , Selendroid и т. д.) и вместо этого используйте ADB. - person jkbz; 01.07.2014
comment
@jkbz Я пробовал выше для iOS, и я получаю следующее исключение java.lang.AssertionError: Execution Failed из-за того, что не удалось создать новый сеанс. (Исходная ошибка: запрошен новый сеанс, но он еще не запущен) (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека). Нужно ли очищать предыдущую сессию? Можете ли вы указать мне, как это сделать? - person Changdeo Jadhav; 01.07.2014
comment
Я бы порекомендовал создать отдельный поток для этой проблемы и указать особенности вашего кода. Спасибо. - person jkbz; 01.07.2014
comment
Спасибо, вот новый вопрос stackoverflow.com/questions/24530783/ - person Changdeo Jadhav; 02.07.2014

Вы можете использовать:

driver.startActivity(settingsAppPackageName, settingsAppActivityName);

для вызова другого приложения с тем же кодом.

person Nitin Shinde    schedule 28.12.2016

Метод driver.startActivity() можно использовать для переключения между приложениями. Для получения более подробной информации о том, как это работает, вы можете посмотреть видео ниже.

Посмотрите «Appium Tutorial — Переключение между приложениями (Контакты и SMS)» на YouTube https://youtu.be/sH1bHeDDj8U

person srikanth katakam    schedule 05.07.2015
comment
В видео не показан пример кода для переключения с одного приложения на другое. - person h3xh4wk; 19.02.2021