При тестировании собственных приложений 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, я в золоте!
Заранее спасибо за любой отзыв!
Вульф