swift 使用Xcode7的UI测试为App Store创建应用截图

vtwuwzda  于 2022-11-21  发布在  Swift
关注(0)|答案(4)|浏览(134)

每次我们在UI中更改某些内容时,我们都必须手动准备并为iTunes Connect的列表拍摄375(= 5个屏幕截图 * 5种设备类型 * 15种语言)个屏幕截图。
我正在尝试“利用”iOS 9的新UI测试来自动准备和拍摄每种语言的截图。这应该可以保存大量的时间,并为我们的用户提供更好的体验,因为我们没有经常更新截图,因为这涉及到艰苦的工作。
我在网上找不到太多的帮助,可能是因为这个功能太新鲜了。所以这里有两个基本的问题,希望我们能找到一种方法来实现它。
1.是否可以通过UI测试API将屏幕截图保存到磁盘?
1.是否可以对XCTestCase进行全新安装?

piztneat

piztneat1#

这与Xcode 7并不完全相关,但你可以使用snapshot自动截图。

kqhtkvqz

kqhtkvqz2#

是的,您可以使用Xcode UI Testing创建屏幕截图。

  • 为测试创建自定义方案(可选,但建议使用)。
  • 使用CLI(终端)运行测试,如下所示:
xcodebuild -workspace App.xcworkspace \
     -scheme "SchemeName" \
           -sdk iphonesimulator \
           -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.0' 
           test

完成此操作后,要生成屏幕截图,请添加您希望屏幕截图的路径,如下所示:

xcodebuild -workspace App.xcworkspace \
 -scheme "SchemeName" \
       -sdk iphonesimulator \
       -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.0'
       -derivedDataPath './output'
       test

./output会告诉Xcode每次测试都要截图。你可以在here中找到详细信息

gudnpqoy

gudnpqoy3#

1.是否可以通过UI测试API将屏幕截图保存到磁盘?
您可以手动保存它们(通过“在预览中打开”按钮),但我不知道有什么API可以在测试期间收集它们。
1.是否可以对XCTestCase进行全新安装?
我不知道有什么方法可以真正为每个XCTestCase重新安装你的应用程序,但是你可以uninstall it before running all of your tests,或者你可以在XCTestCase上安装use the setUp class method or instance method,以确保你的应用程序在运行测试之前处于全新状态(例如,重置用户默认值等)。

h5qlskok

h5qlskok4#

这是目前为止我发现的最好的方法:Automating App Store localized screenshots with XCTest and Xcode Test Plan
总结一下(并尽量确保这个答案在未来不会受到链接腐烂的影响),你应该创建一个测试计划,遍历你想要截图的应用中的屏幕,并包含类似于以下的代码来截图:

class AppStoreScreenshotTests: XCTestCase {

    var app : XCUIApplication!

    override func setUpWithError() throws {
        continueAfterFailure = false
        self.app = XCUIApplication()
    }
    
    override func tearDownWithError() throws {
        self.app = nil
    }

    func testSearchJourney() {
        self.app.launch()

        // moving to search tab
        app.buttons[AccessibilityIdentifiers.searchTab.rawValue].tap()
        
        // wait for screen to be fully displayed within 5sec
        XCTAssertTrue(app.buttons[AccessibilityIdentifiers.searchButton.rawValue].waitForExistence(timeout: 5))
        
        // take a screenshot of the search page
        attachScreenshot(name: "search-form")
    }

    private func attachScreenshot(name: String) {
        let screenshot = app.windows.firstMatch.screenshot()
        let attachment = XCTAttachment(screenshot: screenshot)
        attachment.name = name
        attachment.lifetime = .keepAlways
        add(attachment)
    }

然后,您可以使用shell脚本自动创建和提取屏幕截图,该脚本使用xcodebuild test执行测试,并使用xcparse将它们导出到单独的文件夹中:

xcparse screenshots --os --model --test-plan-config /path/to/Test.xcresult /path/to/outputDirectory

就我个人而言,我更喜欢这种方法,而不是使用快车道。

相关问题