Ios 如何在我不知道的应用程序上执行UITesting';你没有你的源代码吗?

Ios 如何在我不知道的应用程序上执行UITesting';你没有你的源代码吗?,ios,swift,xcode9,Ios,Swift,Xcode9,我一直在阅读苹果新的和改进的XTest/UITesting框架,作为Android开发者,我有一些问题。在android中,要启动一个我没有运行UiAutomator的源代码的应用程序,我只需要使用 @Before public void setup() { //Init UiDevice instance Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation(); mD

我一直在阅读苹果新的和改进的XTest/UITesting框架,作为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检查元素并获取它们的资源id(或通过文本查找),然后对它们执行操作

在iOS中,我找到的所有教程都集中在测试您可以访问其源代码的应用程序上。虽然我知道在iOS中编写这些测试要简单得多,因为您只需记录希望执行的操作,xcode会为您编写代码,但我不确定如何将UI测试目标设置为当前安装在我的设备上的应用程序。我观看了WWDC视频,该视频使用以下内容进行了多应用程序测试:

var gmailApp: XCUIApplication!
gmailApp.launchArguments = "-StartFromCleanState", "YES"]
gmailApp.launch()
但是,这将不起作用,因为它没有目标

TL;DR:如何将安装在我设备上的应用程序(如gmail)设置为我的UI测试目标,以及如何查找程序包名称以启动该应用程序


谢谢

不幸的是,我认为这是不可能的。

启动另一个应用程序只需要包标识符。


我经常在macOS测试中使用它,所以我想它也适用于iOS。

Hmm,我希望不是这样。我知道可以使用此方法访问设置应用程序或Safari,因此我希望它也能用于第三方应用程序。出于安全目的,每个应用程序在安装时都放在沙箱中,以限制仅访问应用程序自己的文件,但某些设备文件和传感器除外,这些文件和传感器可由请求用户明确许可的应用程序访问。一个应用程序不可能以您所寻求的方式访问另一个应用程序。更多信息请参见此:关于原因的更多信息:“如果恶意代码获得了对正确沙盒应用程序的控制,则只能访问应用程序沙盒中的文件和资源。”此外,应用程序发布者(如谷歌)可能也不希望您拥有该功能。上面的链接特定于macOS沙盒,但同样的概念适用。这是可能的。正如mfeltmann提到的,您只需要传递包标识符。如果没有源代码,我的意思是,假设应用程序在iPhone中,我想直接从设备上自动化应用程序(假设我知道bundle Identifer)是的,这是可能的