如何在UITabBar的按钮上设置accessibilityIdentifier

5
如标题所述,如何以编程方式设置UITabBar按钮上的accessibilityIdentifier?我目前正在尝试在将UITabBarItem添加到选项卡栏之前设置UITabBarItemaccessibilityIdentifier,但似乎无法应用到按钮上。
您该如何在实际显示在页面上的按钮上设置accessibilityIdentifier

UITabBarItem 实现了 UIAccessibilityIdentification 协议。如果您遇到问题,请确保向 Apple 提交错误报告,并在此处发布编号,以便其他人可以克隆它。 - Léo Natan
4个回答

4

我在使用SwiftUI时遇到了这个问题。将accessibilityIdentifier放在其他位置可以解决它:

TabView(selection: $tabSelection) {
   // ...
   // ...
   .tag(0)
   .tabItem {
       Label("Catalog", systemImage: "list.dash")
       .accessibilityIdentifier("tabCatalog") // <-- Works here
   }
   .accessibilityIdentifier("tabCatalog") // <-- Doesn't work here
}

1
在 XCTest 中,您如何进入 tabCatalog? - Anton Tropashko
2
奇怪的是,SwiftUI在幕后将其转换为按钮,所以这个可以工作: let tabCatalog = app.buttons [“tabCatalog”] sleep(1) tabCatalog.tap() - James Toomey

2

当我遇到同样的问题时,最终我将标识符设置在底层UITabBarButton上(不确定苹果公司是否会对此提出反对..) 您需要先使用UITabBarItem及其标识符设置您的UITabbar,然后执行以下操作:

//Set the tabbar items and their identifiers first, then, copy them on the underlying UITabBarButton using this code
int index = 0;
for (UIControl *control in controller.tabBar.subviews)
{
    if ([control isKindOfClass:UIControl.class] && index < tabBarController.tabBar.items.count)
    {
        control.accessibilityIdentifier = controller.tabBar.items[index].accessibilityIdentifier;
        index++;
    }
}

0

tabBarItem属性不是UIView的继承者。它仅在将子选项卡添加到UITabBarController类时使用。在tabBarController加载和初始化选项卡之后,更改tabBarItem属性的值是无用的。因此,非常重要的是确切地设置tabBarItem.accessibilityIdentifier的值。

唯一有效的方法是在控制器初始化程序中设置值,如下面的示例所示:

class ViewController: UIViewController {

   init() {
      super.init(nibName: nil, bundle: nil)
      self.tabBarItem.accessibilityIdentifier = "myTabIdentifier"
   }

}

如果您在其他地方设置了此属性的值(例如在viewDidLoad方法中),则UITabBarController将永远不会知道它,因为viewDidLoad方法是在tabBarController初始化其标签之后调用的。

或者,如果上述解决方案不适合您,您可以使用选项卡索引与选项卡交互,如下所示:

let app = XCUIApplication()
app.tabBars.buttons.element(boundBy: tabIndex).tap()

0

对于 UI 测试,我是这样做的,在一个视图控制器中:

self.tabBarItem.accessibilityIdentifier = @"NewRecordTab";

在Swift中,应该这样写

self.tabBarItem.accessibilityIdentifier = "NewRecordTab"

1
由于某些原因,当我在选项卡的根视图控制器上设置选项卡项时,UI测试无法看到此标识符。 - Андрей Первушин
1
对我也不起作用。由于UITabBarItem并不是实际显示在屏幕上的东西,它只是一个容器,用于显示按钮上显示的信息。 - Marc-Alexandre Bérubé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接