Как выполнить 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.