gpt4 book ai didi

ios - 我的 XCode UI 测试如何检测到屏幕已更改?

转载 作者:技术小花猫 更新时间:2023-10-29 10:17:29 24 4
gpt4 key购买 nike

我正在尝试使用 XCode 7 的 XCTest UI 测试功能创建一个树遍历器,该功能系统地探索 TableView 的确定性树到指定深度。它几乎可以工作,除了我无法可靠地检测到任何给定元素上的点击是否实际上触发了到新屏幕的转换。我有一个大部分时间都有效的 hacky 方法,即检测导航栏标签是否已更改或菜单元素的数量是否已更改。

第一个测试有假阴性,因为连续的屏幕可能有相同的导航栏标签(我正在浏览的代码库不是我的)。第二个测试有误报,因为有时单击表格元素不会转换到另一个表格/屏幕,而是会向当前屏幕添加额外的元素。

阅读一些内容后,似乎使用无障碍标签可能是可行的方法。因此,我在应用程序代码中(在 viewDidAppear 中)为导航栏的辅助功能标签设置了一个 UID,然后在 UI 测试代码中对其进行了测试。感觉这应该可行,但我在测试代码中只得到 nil 的值。

我会坦白承认,在 UI 测试方面我是一个菜鸟,主要是在没有清楚地了解自己在做什么的情况下剪切/粘贴/改编其他人的代码。所以我可能在可访问性标签代码本身以及可能在检测屏幕已更改的概念级别上犯了一些天真的错误;也许我可以做一些更简单/更惯用的事情。

在应用程序中:

- (void)viewDidAppear: (BOOL)animated {

[super viewDidAppear: animated];

//...

UINavigationBar* navBar = self.navigationController.navigationBar;
if( navBar )
{
static NSInteger s_UID = 0;
navBar.topItem.accessibilityLabel = [NSString stringWithFormat:@"UID-%ld", s_UID++];
}
}

在 XCTest UI 测试中:

- (NSString*) navBarAccessibilityLabel: (XCUIApplication*) app
{
NSString* result = NULL;

XCUIElementQuery *navBars = app.navigationBars;
XCUIElement* firstElem = [navBars.staticTexts elementBoundByIndex:0];
if( firstElem )
{
result = (NSString*)firstElem.accessibilityLabel; // This is always nil
}

return result;
}

请注意,已找到 firstElem,并且我能够提取例如firstElem.label 从中非常高兴。

感谢任何帮助。

最佳答案

您可以测试元素是否可访问:

在 UI 测试中左键单击并开始录制,模拟器将启动,您可以单击模拟器中的元素,如果该元素可访问,Xcode 将在 testExample 方法中为您编写测试代码。

enter image description here

或者在模拟器中运行您的应用程序并打开辅助功能检查器,并将鼠标悬停在元素上,因为详细信息将显示在检查器中。

enter image description here

除此之外,我认为您可以通过为每个屏幕添加导航项标题来验证这一点,即 self.navigationItem.title = @"myScreen";

然后用断言验证屏幕,即

// let app = XCUIApplication() // Swift

UIApplication *app = [UIApplication alloc] init]; // Objective-C

XCTAssertEqual(app.navigationBars.element.identifier, "myScreen") // Don't forget to import class XCTest

关于ios - 我的 XCode UI 测试如何检测到屏幕已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com