我想为一个相当复杂的iPhone应用程序编写UIAutomation(基于JavaScript)测试.我不想使用一个单独的大文件,而是通过使用几个文件来分离测试函数和帮助程序.这有可能吗?你如何构建你的UIAutomation测试?
我见过的所有UI Automation 示例都使用标准组件,可以使用该value()方法使用JavaScript API检查其状态.这有点限制.让我们说你想检查颜色或alpha值等等.
如何检查视图的属性?
例如:点击某个元素应该使其"选中".我想对它进行点击,然后验证isSelected是否为TRUE.
更新:
我找到了理论上应该执行的withPredicate()方法,除了它似乎只触发name属性:
element.withPredicate("isSelected == YES") // always fails
element.withPredicate("name matches 'my element'") // works
Run Code Online (Sandbox Code Playgroud) 我试图了解UIAutomation如何用于执行自动应用程序测试,因此我创建了一个可以从JavaScript界面驱动的温度转换器应用程序.这是UI:

顶部文本字段的可访问性标签为"Celsius",类似地,底部字段的"Fahrenheit"作为其"辅助功能"标签.我正试图通过这个脚本驱动它:
UIALogger.logStart("Test -40ºC == -40ºF");
var window = UIATarget.localTarget().frontMostApp().mainWindow();
var celsiusField = window.textFields()["Celsius"];
var fahrenheitField = window.textFields()["Fahrenheit"];
var convertButton = window.buttons()["Convert"];
celsiusField.setValue("-40");
convertButton.tap();
var fahrenheitValue = fahrenheitField.value();
if (fahrenheitValue == "-40.0") {
UIALogger.logPass("-40C == -40F");
} else {
UIALogger.logFail("-40C == " + fahrenheitValue + "F");
}
Run Code Online (Sandbox Code Playgroud)
这会将摄氏度字段中的文本正确设置为"-40",当点击按钮时,应用程序会将华氏度字段中的文本更新为"-40.0".但是,fahrenheitValue具有值"Fahrenheit"(文本字段的名称/标签),因此测试失败.我想知道这是否可能是一个时间问题,所以在点击后放一秒钟,这并没有改变行为.
是否可以从文本字段中取出文本并将其与预期值进行比较?
我有一个具有以下结构的视图:
GrandView
-Parent View1
-Parent View2
--Child View1
--Child View2
Run Code Online (Sandbox Code Playgroud)
子视图几乎占据了所有边界Parent View2,但边缘周围仍有一些空间.Parent View2如果单击边缘,我可以使用辅助功能检查器在模拟器中进行选择.Parent View2如果我使用的话,我也可以点击UIAutomation:
tapWithOptions({tapOffset:{x:0.15, y:0.95}});
Run Code Online (Sandbox Code Playgroud)
但是,我isVisible()总是回电话0.我希望如果我可以点击元素,或者使用辅助功能检查器选择它,它应该返回1.
UIAutomation如何确定a UIAElement是否可见?
我最近尝试使用UIAutomation框架进行iOS设备的一些简单的自动UI测试.虽然有趣且相对强大,但我发现编写脚本而没有调试它们的可能性非常繁琐.
有没有办法调试UIAutomation脚本?这里要强调的是脚本本身的调试,即JavaScript的一部分,我已经找到了如何调试测试应用程序本身的解释在这里.
有没有办法在多个连接的iOS设备上运行UIAutomation脚本?目前我使用带-w开关的仪器以及每个设备的UDID?
我很感激你的想法.
我的iOS应用程序具有10多种语言的本地化.我想检查所有屏幕是否正常(标签不是太长/短等).
我知道我可以浏览我的应用程序并使用UI Automation制作屏幕截图.在UI自动化中有没有办法切换模拟器的语言?有没有办法通过启动1命令为我的应用程序生成屏幕截图?
谢谢!
当我在Instruments中运行UIAutomation脚本时,一切正常,但是当我从命令行运行完全相同的脚本时,我收到此错误:
Cannot perform action on invalid element: UIAElementNil from target.frontMostApp().mainWindow().tableViews()[0].cells()["ID number, Required"].textFields()[0]
这是我用来启动测试的Instruments命令
instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate /Users/johan/Library/Developer/Xcode/DerivedData/Brokers-etvmwznhcjprybdekgtixzzsnbrw/Build/Products/Release-iphonesimulator/MyApp -e UIASCRIPT /Users/johan/Desktop/Script.js
Run Code Online (Sandbox Code Playgroud) iphone command-line instruments ui-automation ios-ui-automation
我刚刚开始使用UI自动化iOS应用程序,我已经遇到了麻烦.我无法附加屏幕截图,所以我会尽力描述我的场景.
我正在为iOS 6.0构建并使用故事板.该应用程序启动到带有导航控制器的屏幕.根视图控制器包含一个主视图,该视图具有占据屏幕底部60%的1个UIView子视图和位于该子视图上方的分段控件.我能够为主视图配置辅助功能(标签"mainview").然后我能够在我的测试中找到这个元素没问题.但是,我现在无法找到分段控制器.所以我决定从我的"mainview"元素中注销"elements()"和"segementedControls()"的长度,每个数组的长度为0.所以当测试运行我的应用程序时,它说没有子 - 我的主要观点上的元素.
需要注意的另一件事是我在故事板编辑器的身份检查器中找不到任何可访问性部分用于分段控件.但是我暂时在主视图中添加了一个按钮,并使用辅助功能标签对其进行了配置,以便测试在运行我的测试时,elements()或者按钮()调用是否随后会显示主视图的元素,但是这些数组仍然是即使按下按钮也会返回空白状态.
这是我的脚本:
var target = UIATarget.localTarget();
var app = target.frontMostApp();
function selectListView() {
var testName = "selectListView";
UIALogger.logStart(testName);
var view = app.mainWindow().elements()["mainview"];
if (!view.isValid()) {
UIALogger.logFail("Could not locate main view");
}
UIALogger.logMessage("Number of elements for sub element: " + view.elements().length);
var segmentedControl = view.segmentedControls()[0];
if (!segmentedControl.isValid()) {
UIALogger.logFail("Could not locate segmented control on physician collection parent view");
}
var listButton = segmentedControl.buttons()[1];
if (!listButton.isValid()) {
UIALogger.logFail("Could not locate list button on segemented controller on physician …Run Code Online (Sandbox Code Playgroud) 与此问题类似,除了授权数据库更改了mavericks的格式并且旧解决方案不起作用:有没有办法从Instruments(XCode)的命令行实例中删除授权提示?
具体的用例是让ios-driver工作以运行自动化测试:http://ios-driver.github.io/ios-driver/faq.html
具体提示是"Instruments希望分析其他进程的权限"
我试过了
sudo security authorizationdb write system.privilege.taskport allow
Run Code Online (Sandbox Code Playgroud)
和
sudo security authorizationdb write system.privilege.taskport is-developer
Run Code Online (Sandbox Code Playgroud)
(用户在_developers组中)但每次提示仍然出现:(
也试过了
sudo security authorizationdb write com.apple.dt.instruments.process.analysis allow
Run Code Online (Sandbox Code Playgroud)
因为它看起来很相关(想想可能更改所需权限的名称以及设置它的方式),但仍然得到提示
ios ×7
instruments ×4
xcode ×4
iphone ×3
javascript ×2
automation ×1
command-line ×1
debugging ×1
objective-c ×1
uiview ×1