在UIToolbar中的UINavigationBar中访问UIToolbar中的UISearchBar

时间:2012-04-13 19:39:58

标签: iphone ui-automation ios-ui-automation

我们只支持横向模式,出于某种原因,当我们推送到不同的视图控制器,旋转应用程序,然后弹出时,我们的UISearchBar将占用整个navigationBar并将标题推送到LHS。所以我们最终将UISearchBar包装在UIToolbar中,这似乎解决了这个问题。

因此,在第二个被推入堆栈的视图控制器上,我们在UINavigationBar的UIToolbar中有一个UISearchbar。我似乎无法访问它。我想编写一个脚本来输入一些搜索项并单击这些项,这样当我们的数据模型发生变化时,我们就不会崩溃。

我遇到的问题是我不确定如何访问它。我假设

UIATarget.localTarget().frontMostApp().mainWindow()

可以在不仅仅是rootViewController的屏幕上使用。所以我试着做

UIATarget.localTarget().frontMostApp().mainWindow().navigationBar().toolBar().tap();

但是这不起作用。我假设navigationBar()。buttons()[---]不会提供任何用途,因为它不是我试图访问的按钮。当我做的时候

window.logElementTree();

我明白了:

UIAWindow
-> UIANavigationBar
-> -> UIAButton
-> -> UIAToolbar  // (I'm trying to show the disclosure triangles in how it looks like in the log.

所以我可以看到我需要的navigationBar,以及它下面的toolBar,但不知道如何到达它。

我也试过这个

var navBarElements = window.navigationBar().elements();

for (var elem in navBarElements) {
    if (elem["Toolbar"]) {
        UIALogger.logMessage("toolbar");            
    }
}

在我创建工具栏的代码的viewDidLoad中,我有这个:

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 160, 44)];
toolbar.accessibilityIdentifier = @"Toolbar";

但我从来没有得到logMessage表明我有正确的项目。我是不是试图只是使用屏幕并点击它?谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用返回对象的UIAElementArray而不是UIAElement的函数

UIATarget.localTarget().frontMostApp().mainWindow().navigationBar().toolBars()[<LabelOfToolBarOrIndexStartingFromZero>].tap();

甚至

UIATarget.localTarget().frontMostApp().mainWindow().navigationBars()[<NameOfNavigationBarOrIndexStartingFromZero>].toolBars()[<LabelOfToolBarOrIndexStartingFromZero>]].tap();

顺便说一下,尝试替换

if (elem["Toolbar"])

if (elem["object UIAToolbar"])