如何使用JavaScript访问UI自动化中的操作表(及其按钮)?

时间:2014-01-24 11:32:39

标签: javascript ios uiactionsheet ios-ui-automation xcode-instruments

我有一个非常简单的应用程序,其中包括一个TableViewController,它显示一个包含图像,标签和按钮的自定义单元格的表格,当您点击按钮时,将显示actionSheet。所以,在我的自定义java脚本中(使用Instruments-UIAutomation)我想在我的表中按下按钮(我可以毫无问题地执行此操作),然后当actionSheet出现时我只想点击唯一的按钮(取消按钮)它表明了。

我不知道如何正确地做到这一点。所以这是我的js代码:

var target = UIATarget.localTarget();
var app = target.frontMostApp();
var main = app.mainWindow();

main.tableViews()[0].cells()[1].buttons()["DetailsButton"].tap();
target.delay(5);
main.actionSheet().elements()[0].tap();

这就是我得到的信息:

Script threw an uncaught JavaScript error: 'undefined' is not a function (evaluating 'main.actionSheet()') on line 9 of New%20Script

我也试过actionSheet().buttons()[0].tap(); - 没有帮助,继续得到同样的错误。

我甚至尝试通过它的accessibleLabel访问actionSheet:

main.actionSheet()["CellNumberSheet"].elements()[0].tap();

如果它会有所帮助,那就是我显示actionSheet的方式:

[actionSheet showInView:[UIApplication sharedApplication].keyWindow];

元素层次结构似乎也是正确的。

enter image description here

在网上找不到太多有用的信息......所以任何帮助都会受到赞赏......

4 个答案:

答案 0 :(得分:6)

在iOS8上,操作表按钮和元素似乎没有用,因此我检查了SparkInspector,它现在使用了一个集合视图:

此代码将点按取消按钮的底部按钮:

target.frontMostApp().actionSheet().collectionViews()[0].visibleCells()[0].tap()

答案 1 :(得分:2)

如果您想点按actionSheet,您必须使用以下内容:

var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();

target.frontMostApp().actionSheet().buttons()["Cancel"].tap();

但如果您使用window.actionSheet(),则会返回错误。

答案 2 :(得分:1)

实际上你需要使用app.actionSheet()来获取动作表。

请参阅UIAApplication

app.actionSheet().elements()[0].tap(); 

这应该有效

答案 3 :(得分:0)

尝试使用:

 //check that action sheet is on the screen
   app.actionSheetIsValid();

 //add some delay
   target.delay(2);

 //check that the button is on the actionSheet
   actionSheet.actionSheetButton("Cancel");

 //add some delay
   target.delay(2);

 //touch Exit button
   actionSheet.tapActionSheetButtonByName("Cancel");