Calabash touch命令在calabash-ios控制台中有效,但在运行时无效

时间:2017-04-14 20:01:18

标签: calabash calabash-ios

我需要一些认真的帮助。当我将touch命令输入到calabash-ios控制台时,它在每种情况下都能正常工作。例如,

touch("view marked:'Select Accounts'") 

完全按照预期工作。

但是,当我使用完全相同的命令实际运行测试时,它不起作用。它根本不会抛出任何错误,但是应该由按钮单击启动的操作不会发生。让我感到沮丧的是......我真正杀了我的是,这不是一个一致的问题,有时触摸命令工作得很好,有时则没有。

是否还有其他人遇到与此相似的问题,如果是,您是否能够发现问题所在?

提前致谢! ADE

3 个答案:

答案 0 :(得分:1)

它可能是由动画引起的。您可以使用wait_for_none_animating方法。

Click here用于文档。

答案 1 :(得分:1)

首先,本地化元素的最佳做法是使用唯一ID。要实现这一点,您应该在Xcode中填充app元素的accessibilityIdentifier字段。

这是识别物体的最准确方法。之后,您可以使用以下查询:

query("* id:'account_select_button'")

使用“已标记”语法的查询在应用对象的textaccessibilityIdentifier属性中查找匹配项。此方法不适用于多语言应用或标签更改。

对于等待元素,您应该使用此代替sleep

wait_for_element_exists("* marked:'Select Accounts'", :timeout => 10)
touch("* marked:'Select Accounts'")

默认情况下,Calabash查询仅搜索可见对象的属性。如果元素位于视口之外,则需要滚动直到元素出现,然后才能对其执行任何操作:

while (query("* marked:'Select Accounts'").empty?) == true
    swipe :up      #it performs scroll down, swipe :up equals scroll up    
    sleep 1        #in this case you have to wait between two swipes
end

我从未尝试过,但还有另一种方式。正如我所读到的,无论元素可见性如何,此表达式都会在每个视图中进行查询。

query("all marked:'Select Accounts'")
query("all view marked:'Select Accounts'")
query("all * marked:'Select Accounts'")

答案 2 :(得分:0)

这可能与时间有关。在实际触摸之前,你需要有一点延迟。您可以通过在触摸之前添加睡眠(0.5)或类似的东西来快速测试它。 您之前也可以使用wait_for语句,但即便如此,您可能还需要添加一点延迟才能使其正常工作。