iOS - UI测试是否播放视频

时间:2017-03-14 01:31:28

标签: ios swift xcode-ui-testing

您好我有一个应用程序会打开一个webview,打开一个里面有视频标签的页面 我想写一个UI测试来确认视频是否正确播放 有可能吗?

1 个答案:

答案 0 :(得分:3)

我并不完全确定“正确播放”是什么意思。您可以测试的是,当您按下播放按钮时播放视频。但你无法真正测试它是否是正确的视频。

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

<强> 1。尝试记录测试。

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

我为加载此网址的网页视图录制了一个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)

    }

呸!真的很丑,但它的确有效。如果存在“完成”按钮,测试将启动视频并测试,视频播放时为真。 (我必须添加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)
    }

在这里,您可以访问应用程序窗口并点击一个坐标,该坐标定义为宽度的50%和高度的80%。 (看看屏幕截图,看看那是我案例中按钮的位置)。当然,你必须定义自己的坐标,它适用于你的情况。

enter image description here

这个解决方案有效,但确实很不稳定。如果视频在页面上的位置发生变化,您的测试将会中断。此外,不同设备的坐标也会发生变化。您必须尝试使用​​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)
    }