在 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 的播放状态的主要内容,如果未能解决你的问题,请参考以下文章

从 XCode UI 测试目标访问项目文件

UI 测试 - 访问相机

在 Swift 3 UI 测试中访问自定义视图组件中的元素

在 iOS 13 UI 测试中访问 UIActivityViewController 上的按钮会导致崩溃

在没有可访问性 ID 的 Xcode UI 测试中定位元素

在 XCode 中的 UI 测试期间无法访问自定义视图