iOS - UI 测试视频是否播放

iOS - UI Test check if video is played or not

您好,我有一个应用程序可以打开一个网页视图,该网页视图将打开一个包含视频标签的页面。
我想写一个 UI 测试来确认视频是否正确播放。
可能吗?

我不太清楚你所说的 "correctly played" 是什么意思。您可以测试的是当您按下播放按钮时是否播放视频。但是你无法真正测试它是否是正确的视频。

按下通过视频标签嵌入的视频的播放按钮有点棘手。我可以想到两种方法:

1.尝试记录测试。

根据您的 HTML 的结构,Xcode 创建的代码可能非常难看(更糟糕的是:有时 Xcode 甚至无法记录播放按钮的按下) .

我为加载此 URL 的 webview 录制了一个 UITest:https://www.w3schools.com/html/html5_video.asp

这是我得到的:

func testVideo() {
        let app = XCUIApplication()
        app.launch()

        app.children(matching: .window).element(boundBy: 0).children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .other)["HTML5 Video"].children(matching: .other).element(boundBy: 5).buttons["Start Playback"].tap()

        sleep(2)

        XCTAssert(app.buttons["Done"].exists)

    }

呸!真的很难看,但它有效。测试会启动视频并测试 "Done" 按钮是否存在,视频播放时是否存在。 (我必须添加 sleep 语句才能使断言生效)

如果记录测试不起作用,您可以使用另一种解决方案:

2。点击坐标开始播放视频:

func testVideo() {
        let app = XCUIApplication()
        app.launch()

        sleep(2)

        app.windows.element(boundBy: 0).coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.8)).tap()

        sleep(2)

        XCTAssert(app.buttons["Done"].exists)
    }

在这里您可以访问应用程序的 window 并点击定义为宽度的 50% 和高度的 80% 的坐标。 (查看屏幕截图以了解我的案例中按钮的位置)。当然,您必须定义适合您情况的坐标。

这个解决方案有效,但它确实不稳定。如果视频在页面上的位置发生变化,您的测试就会中断。坐标也会因不同的设备而改变。您必须尝试使用​​ sleep 语句才能使其工作。所以它可能只能作为最后的手段使用。

测试视频是否正在播放:

当测试开始播放视频时,应用进入全屏模式并使用媒体播放器播放视频。要测试视频是否正在播放,您可以访问位置滑块并检查其 value。滑块的值是一个字符串(例如“12%”),因此要检查它是否仍为 0%,您必须将其转换为数值并断言该值大于 0:

func testVideo() {
        let app = XCUIApplication()
        app.launch()

        sleep(2)

        app.windows.element(boundBy: 0).coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.8)).tap()

        sleep(2)

        let currentPositionSlider = app.sliders.element(boundBy: 0)
        let percentageValueString = (currentPositionSlider.value as! String).replacingOccurrences(of: "%", with: "")
        let percentangeValue = Int(percentageValueString) ?? 0
        XCTAssert(percentangeValue > 0)
    }