我正在为我的应用程序进行自动UI测试,并且在尝试设置运行测试的环境时遇到了麻烦。该计划大致如下:
一切正常,除非仪器启动应用程序以执行测试,警报似乎会询问用户是否允许通知。这一切都符合预期,但我无法找到摆脱警报的方法。
我已经尝试过的事情:
我也经历了可以在SO上找到的上述所有排列,无论我做什么,我都不会调用我的onAlert回调。所以我尝试的另一件事是:
我写的剧本:
tell application "System Events"
tell process "iOS Simulator"
set allUIElements to entire contents of window 1
repeat with anElement in allUIElements
try
log anElement
end try
end repeat
end tell
end tell
并显示:
static text “MyApp” Would Like to Send You Notifications of window iOS Simulator - iPhone 6 - iPhone 6 / iOS 8.1 (12B411) of application process iOS Simulator
static text Notifications may include alerts, sounds, and icon badges. These can be configured in Settings. of window iOS Simulator - iPhone 6 - iPhone 6 / iOS 8.1 (12B411) of application process iOS Simulator
UI element 3 of window iOS Simulator - iPhone 6 - iPhone 6 / iOS 8.1 (12B411) of application process iOS Simulator
看起来按钮位于“UI元素3”内部,但我无法从其中检索任何元素,更不用说单击它了。所以我查看了Accessibility Manager:
它作为一个孩子坐在那里,其他的是通知标题和消息。但当我转到那个元素时,会突出显示,我看到了:
它被识别为通用元素,它没有任何孩子...... 有趣的是,当我在辅助功能检查器中选择“确定”按钮时,我实际上可以看到它是窗口的子项,但它从未列出:
有人可以了解这里发生的事情吗?如何在Applescript中按下该按钮?
答案 0 :(得分:0)
如果您使用Instrument进行自动化,则需要注册回调(onAlert)以对警报执行任何操作。
但是你的问题是在你的脚本实际开始执行之前出现警报,那时警报没有注册回调。
因此,如果启动应用程序时警报可能会延迟大约10秒,那么只能处理它。但这只能通过源代码而不是自动化代码来控制。
因此,只有剩下的选项是您需要在安装新应用程序后手动关闭警报
我也面临同样的问题,发现它是工具的限制
此工具的限制太多,这就是为什么我转移到UFT
答案 1 :(得分:0)
我有类似的问题。我只想要警报上最后一个控件的位置。所以我提出了以下代码:
on get_simulator_last_object_rect(simulator_index)
tell application "System Events"
set ProcessList to (unix id of processes whose name is "iOS Simulator")
set myProcessId to item simulator_index of ProcessList
tell window 1 of (processes whose unix id is myProcessId)
-- Forcefully print the UI elements so that Accessibility hierarchy is built
UI elements
-- Then wait precisely to let the Accessibility view hierarchy is ready
delay 0.5
set lowest_label_lowest_position to 0
set _x to 0
set _y to 0
set _width to 0
set _height to 0
repeat with element in UI elements
set {_x, _y} to position of element
set {_width, _height} to size of element
set current_control_lowest_position to _y + _height
if current_control_lowest_position > lowest_label_lowest_position then set lowest_label_lowest_position to current_control_lowest_position - _height / 2
end repeat
return {{_x, _y}, {_width, lowest_label_lowest_position}}
end tell
end tell
end get_simulator_alert_ok_button_position
我有一个桌面应用来控制我的行为。我在桌面应用程序中使用此苹果脚本来获取最后一个控件的框架。现在我有了框架,我创建了一个鼠标事件,并在激活模拟器后执行了对框架的单击。
虽然我还没有尝试,但我很确定你可以从苹果脚本创建鼠标事件并执行点击帧的框架/中心。
希望这有帮助。
谢谢, RKS