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)
}
您好,我有一个应用程序可以打开一个网页视图,该网页视图将打开一个包含视频标签的页面。
我想写一个 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)
}