Appium iOS测试未运行

Appium iOS测试未运行,ios,testing,webdriver,automated-tests,appium,Ios,Testing,Webdriver,Automated Tests,Appium,我正在尝试使用appium设置一个自动化测试环境,但是遇到了麻烦。我看到的问题是,appium正在提取包含.app目录的zip,但随后声称找不到.app。我的平台是mac。具体误差如下: info: Unzipping /var/folders/0s/0kz_6kb13f35wxwjxkff9sdw0000gn/T/appium-app113922-2258-1ap6o7i.zip info: Testing zip archive: /var/folders/0s/0kz_6kb13f35wx

我正在尝试使用appium设置一个自动化测试环境,但是遇到了麻烦。我看到的问题是,appium正在提取包含.app目录的zip,但随后声称找不到.app。我的平台是mac。具体误差如下:

info: Unzipping /var/folders/0s/0kz_6kb13f35wxwjxkff9sdw0000gn/T/appium-app113922-2258-1ap6o7i.zip
info: Testing zip archive: /var/folders/0s/0kz_6kb13f35wxwjxkff9sdw0000gn/T/appium-app113922-2258-1ap6o7i.zip
info: Zip archive tested clean
info: Unzip successful
info: Got configuration error, not starting session
error: Failed to start an Appium session, err was: App zip unzipped OK, but we couldn't find a .app bundle in it. Make sure your archive contains the .app package and nothing else
info: Responding to client with error: {"status":6,"value":{"message":"A session is either terminated or not started","origValue":"App zip unzipped OK, but we couldn't find a .app bundle in it. Make sure your archive contains the .app package and nothing else"},"sessionId":null}
我不确定我的代码中是否有错误,下面是我的setup()方法的内容(基本上是从官方示例中复制的)

需要考虑的事项:

  • 你的.zip应该只包含.app
  • .app应使用与设备(iPhone)上使用的相同的开发人员证书在XCode中构建

  • 对我来说,它是这样工作的:我在XCode中从源代码构建了一个.app并上传到设备上。然后在Appium中,我只指定了应用程序的Bundle ID(在XCode Window>Organizer>Apps中,如果我没记错的话)。

    对于任何有类似问题的人:我通过指定.app文件修复了这个问题,但在运行Appium时在命令行而不是在测试代码中指定了设备的UDID。我认为指定“设备”功能会导致一个错误(可能会使appium认为这是android测试,尽管它在寻找一个.app)

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("device", "8b0949a1d3fe5d7283cc46ca5470acd67d6c5d7b");
    File app = new File("/Users/user/path/to/zip");
    capabilities.setCapability("version", "7.0");
    capabilities.setCapability("app", app.getAbsolutePath());
    driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                capabilities);
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);