Как выполнить UITesting для приложения, для которого у меня нет исходного кода?

Я читал о новых и улучшенных платформах XCTest/UITesting от Apple, и у меня есть несколько вопросов как разработчика Android. В Android, чтобы запустить приложение, для которого у меня нет исходного кода, для запуска UiAutomator я бы просто использовал

@Before
public void setup() {
    //Init UiDevice instance
    Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
    mDevice = UiDevice.getInstance(mInstrumentation);

    //start from home screen on each new test
    mDevice.pressHome();

    //wait for launcher
    final String launcherPackage = mDevice.getLauncherPackageName();
    assertThat(launcherPackage, notNullValue());
    mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT);

    //launch app
    Context mContext = InstrumentationRegistry.getContext();
    final Intent intent = mContext.getPackageManager()
            .getLaunchIntentForPackage(GMAIL_APP_PACKAGE);

    //Clear any previous instances
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    mContext.startActivity(intent);

    //wait for app to appear
    mDevice.wait(Until.hasObject(By.pkg(GMAIL_APP_PACKAGE).depth(0)), LAUNCH_TIMEOUT);
    mDevice.waitForWindowUpdate(null, 5000);
}

Используя приведенный выше код, я могу запустить нужный мне пакет, затем использовать UiAutomatorView.bat для проверки элементов и получения их идентификаторов ресурсов (или поиска по тексту), а затем выполнять операции над ними.

В iOS все учебники, которые я нашел, сосредоточены на тестировании приложений, к которым у вас есть доступ к исходному коду. Хотя я понимаю, что гораздо проще написать эти тесты в iOS, поскольку вы просто записываете действия, которые хотите выполнить, а xcode пишет код для вас, но я не уверен, как установить цель тестирования пользовательского интерфейса для приложения, которое в данный момент установлен на моем устройстве. Я смотрел видео WWDC, которое прошло через тестирование нескольких приложений, используя это:

var gmailApp: XCUIApplication!
gmailApp.launchArguments = "-StartFromCleanState", "YES"]
gmailApp.launch()

однако это не будет работать, так как у него нет цели.

TL; DR: Как настроить приложение, установленное на моем устройстве, например gmail, в качестве цели тестирования пользовательского интерфейса и как узнать имена пакетов для запуска приложения?

Спасибо!

1 ответ

Решение

Я не верю, что это возможно, к сожалению.

Идентификатор пакета нужен только для запуска другого приложения. https://developer.apple.com/documentation/xctest/xcuiapplication/2879415-initwithbundleidentifier?language=objc

Я часто использую это для тестирования macOS, так что думаю, он будет работать и для iOS.

Другие вопросы по тегам