在 UI 测试中访问 MPMoviePlayerController 的播放状态
Posted
技术标签:
【中文标题】在 UI 测试中访问 MPMoviePlayerController 的播放状态【英文标题】:Access playbackState of MPMoviePlayerController within UI Test 【发布时间】:2017-04-11 05:22:15 【问题描述】:有没有办法使用 XCTest 的 UI 测试框架来评估 MPMoviePlayerViewController 是在播放还是暂停?
我可以通过记录器吐出的这段漂亮的代码来访问视频元素
[[[[[[[[app.otherElements[@"VideoPlayer_ViewController"] childrenMatchingType:XCUIElementTypeOther] elementBoundByIndex:0]
childrenMatchingType:XCUIElementTypeOther].element
childrenMatchingType:XCUIElementTypeOther].element
childrenMatchingType:XCUIElementTypeOther] matchingIdentifier:@"Video"]
但我在 XCUIElement 界面或 XCUIElementAttributes 协议中看不到任何可以帮助我断言播放器正在播放或暂停的内容。有什么建议吗?
【问题讨论】:
你能访问播放器的源代码吗? 是的。现在我能想到的唯一解决方案是在播放或暂停时将播放器的accessibilityValue设置为@“playing”或@“paused”。那是你要去的地方吗? 是的,这就是我要建议的。虽然在源代码中,它们可能是具有不同图像的同一个按钮,但对于用户来说,它们是具有不同功能的不同按钮,因此它们的识别方式不同是有道理的,因为 UI 测试是对用户交互的模拟。 就我而言,没有任何按钮。但是用户可以点击视频,这将在视频顶部打开一个浏览器。显示浏览器时,应暂停视频。这就是我想要测试的。 【参考方案1】:最终设置视图控制器的视图的accessibilityValue
呈现MPMoviePlayerViewController
就像这样
- (void)moviePlayerPlaybackStateDidChange:(NSNotification *)notification
if (self.player.playbackState == MPMoviePlaybackStatePlaying)
self.view.accessibilityValue = @"MPMoviePlaybackStatePlaying";
if (self.player.playbackState == MPMoviePlaybackStatePaused)
self.view.accessibilityValue = @"MPMoviePlaybackStatePaused";
然后我可以像这样访问值
// Playing
[[[XCUIApplication alloc] init].otherElements[@"VideoPlayer_ViewController"].value isEqualToString:@"MPMoviePlaybackStatePlaying"];
// Paused
[[[XCUIApplication alloc] init].otherElements[@"VideoPlayer_ViewController"].value isEqualToString:@"MPMoviePlaybackStatePaused"];
【讨论】:
我建议设置可访问性标识符而不是值。值是面向用户的,这意味着 Voice Over 会读取它们。然后在您的测试中,您可以只检查元素是否存在,而不是检查该视图控制器的值。 好点。我需要阅读更多关于不同可访问性属性的含义。以上是关于在 UI 测试中访问 MPMoviePlayerController 的播放状态的主要内容,如果未能解决你的问题,请参考以下文章