您好我有一个应用程序会打开一个webview,打开一个里面有视频标签的页面 我想写一个UI测试来确认视频是否正确播放 有可能吗?
答案 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%。 (看看屏幕截图,看看那是我案例中按钮的位置)。当然,你必须定义自己的坐标,它适用于你的情况。
这个解决方案有效,但确实很不稳定。如果视频在页面上的位置发生变化,您的测试将会中断。此外,不同设备的坐标也会发生变化。您必须尝试使用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)
}