我正在尝试为Dyalog APL中的图形组件编写一个测试,该测试将模拟按钮单击,从而打开新的窗口和击键,以填写表单字段。我的第一种方法是简单地编写一系列QNQ语句以使事件入队:
⎕NQ '#.foo.barButton' 'Select' ⍝ open window
⎕NQ '#.foo.bar.bazTab' 'Select' ⍝ select tab in opened window
....
但是,问题在于,如果尚未显示目标对象(例如,在打开窗口时),则⎕NQ失败:
VALUE ERROR: The event contains an invalid object or event name
我尝试在⎕NQ语句之间插入几秒钟的暂停,但这并没有什么区别,因为执行是同步的。
我应该采取什么方法?
答案 0 :(得分:2)
这里的问题是,单价⎕NQ将消息“发布”到内部队列。当您“ NQ”第二条消息时,第一条消息尚未处理,因此尚未创建目标对象。在⎕NQ中使用1的左参数,它将“发送”消息到对象,而不是“发布”消息。
在我的机器上,我已执行以下操作:
'⎕se.mb.jd' ⎕wc 'MenuItem' 'jd' ('event' 'select' 'jd')
我有一个函数jd:
∇jd a
[1] 'f'⎕WC'form'
∇
和一个函数foo:
∇foo
[1] 1 ⎕NQ'⎕se.mb.jd' 'select'
[2] ⎕DL 5
[3] 'done'
∇
当我运行foo时,该窗口会立即弹出,然后有5秒钟的延迟才可以看到会话完成。
您可以尝试吗?然后,我们将看看您在做些什么。
答案 1 :(得分:0)
如果测试函数是异步调用的(使用生成器运算符“&”),则延迟将按预期工作:
∇ Test dummy
⎕NQ '#.foo.barButton' 'Select' ⍝ open window
⎕NQ '#.foo.bar.bazTab' 'Select' ⍝ select tab in opened window
....
∇
Test& 0