Как создать действительный архив .app или .zip для автоматизации iOS с помощью Appium?

При тестировании собственных приложений Objective-C Appium требуется действительный пакет .app или заархивированный .zip пакет .app, чтобы запустить автоматизацию с помощью Instruments.

Но я делаю что-то ужасно неправильно и натыкаюсь на кирпичную стену, пытаясь просто СОЗДАТЬ действительный пакет .app, который Appium действительно может запускать в эмуляторе iOS.

Я пишу свою автоматизацию на Java и использую JUnit.

В настоящее время в Xcode я создаю файл .xarchive для «устройства iOS», а затем использую Xcode Organizer, чтобы показать мне, где был помещен файл .xarchive. Как только я нахожу этот архив, я использую «показать содержимое пакета» для детализации .xarchive, пока не найду пакет test.app в xarchive, который неактивен и показывает кружок / косую черту через значок .app (да , знаю, беда...). Я извлекаю пакет test.app из .xarchive, а затем помещаю его в каталог с правами записи 777.

В моем Java-коде (проект Maven с использованием Eclipse IDE) я пишу такие возможности, указывая полный путь к пакету test.app:

package com.my.appium._webdriver_test_demo;
import java.net.URL;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class AppiumWebDriverTestBVTDemo {

    private WebDriver driver;

    @Before
    public void setup() throws Exception
    {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("device", "iPhone Simulator");
        cap.setCapability("app", "/Users/wulf/Library/Developer/Xcode/Archives/2013-05-31/Test/Products/Applications/test.app");    

        driver = new RemoteWebDriver(new URL("http://localhost:4723/wd/hub"), cap);

    }   

    @After
    public void tearDown() throws Exception
    {
        //Do stuff...
    }
}

При запуске этого кода, независимо от того, был ли указан «Путь к приложению» для пакета test.app (так же, как это было сделано выше) в интерфейсе Appium, я получаю следующую ошибку в консоли Appium:

error: Could not parse plist file at /Users/wulf/Library/Developer/Xcode/Archives/2013-05-31/Story/Products/Applications/test.app/Info.plist

error: Failed to start an Appium session, err was: Error: ENOENT, open '/Users/wulf/Library/Developer/Xcode/Archives/2013-05-31/Story/Products/Applications/test.app/Info.plist'

Когда я возьму тот же пакет test.app и заархивирую его, а затем изменю код следующим образом:

cap.setCapability("app", "/Users/wulf/Library/Developer/Xcode/Archives/2013-05-31/Story/Products/Applications/test.app.zip");

Я получаю следующую ошибку в консоли Appium:

error: Failed to start an Appium session, err was: Error: ENOENT, stat '/Users/wulf/Library/Developer/Xcode/Archives/2013-05-31/test.app.zip'

А затем, когда я помещаю тот же заархивированный архив test.app на сервер (Ubuntu, Apache) и меняю свой код следующим образом:

cap.setCapability("app", "http://10.xxx.xxx.100/var/www/myGitRepo/myProject/test.app.zip");

Я получаю следующее диалоговое окно с ошибкой в ​​консоли Appium:

error: Test zip archive threw error Error: Command failed: 

error: Stderr: Archive:  /var/folders/gg/2_0flj7s51nd88kbtlwmm1qjxw981t/T/appium-app11353-39508-t2rmzq.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of /var/folders/gg/2_0flj7s51nd88kbtlwmm1qjxw981t/T/appium-app11353-39508-t2rmzq.zip or
        /var/folders/gg/2_0flj7s51nd88kbtlwmm1qjxw981t/T/appium-app11353-39508-t2rmzq.zip.zip, and cannot find /var/folders/gg/2_0flj7s51nd88kbtlwmm1qjxw981t/T/appium-app11353-39508-t2rmzq.zip.ZIP, period.

error: Stdout: 
error: Failed to start an Appium session, err was: Error testing zip archive, are you sure this is a zip file?

Какого черта я делаю неправильно?

Есть ли способ просто правильно установить мое приложение на эмулятор iOS (я уже могу это сделать просто отлично), а затем заставить Appium сказать Instruments запустить уже установленное приложение? Если да, то как это будет указано в моем блоке кода возможностей?

Нужно ли мне создавать пакет с расширением .ipa, а затем делать с ним что-то необычное?

Очевидно, я новичок, когда дело доходит до создания пакетов .app в Xcode, и мне действительно нужна любая помощь, которую могут предоставить добрые души. Если я просто заставлю Appium запустить дурацкое приложение на эмуляторе iOS, я в золоте!

Заранее спасибо за любой отзыв!

Вульф


person Wulf    schedule 03.06.2013    source источник
comment
См. stackoverflow.com/a/59619663/9470346.   -  person Mark Han    schedule 07.01.2020


Ответы (3)


Самый простой способ, который я нашел для этой работы, - это:

  1. Создайте и запустите приложение для симулятора в xcode.
  2. Перейдите к «Продукты» в левой панели навигации в Xcode, щелкните правой кнопкой мыши на YourApp.app и выберите «Показать в Finder». (Это приложение, которое вы хотите использовать)
  3. Если вы хотите .zip, просто нажмите Control (щелкните правой кнопкой мыши) на приложении и выберите «Сжать YourApp.app».
person Dan Cuellar    schedule 04.06.2013

  1. Создайте свой проект.
  2. Нажмите на значок органайзера (вверху справа).
  3. Щелкните стрелку рядом с каталогом «Производные данные» (что-то вроде ~/Library/Developer/Xcode/DerivedData/YouApp-ajsnkjasngjkans).
  4. Finder откроется в каталоге производных данных, перейдите в /Build/Products/Debug-iphonesimulator.
  5. Есть, вы нашли свой файл .app. Направьте appium на него и наслаждайтесь.
person Leonardo    schedule 09.10.2013

Также вы можете создать приложение в терминале:

xcodebuild VALID_ARCHS="i386" -sdk iphonesimulator -configuration your_configuration -target your_target
person AlekseiPetrovski    schedule 16.01.2014