在UIAutomation的UINavigationBar中访问UIToolbar中的UISearchBar

问题描述:

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

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

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

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

可用于不只是rootViewController的屏幕上。所以我试着去做

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

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

window.logElementTree(); 

我看到:

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

所以我能看到的导航栏,我需要和工具栏在其下方,但不知道如何得到它。

我也试过这个

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

您是否尝试过在乐器编辑器中记录自动化事件并找出访问代码的方式? – brainray 2012-04-14 21:37:28

尝试使用返回对象的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"])