我需要一些认真的帮助。当我将touch命令输入到calabash-ios控制台时,它在每种情况下都能正常工作。例如,
touch("view marked:'Select Accounts'")
完全按照预期工作。
但是,当我使用完全相同的命令实际运行测试时,它不起作用。它根本不会抛出任何错误,但是应该由按钮单击启动的操作不会发生。让我感到沮丧的是......我真正杀了我的是,这不是一个一致的问题,有时触摸命令工作得很好,有时则没有。
是否还有其他人遇到与此相似的问题,如果是,您是否能够发现问题所在?
提前致谢! ADE
答案 0 :(得分:1)
它可能是由动画引起的。您可以使用wait_for_none_animating
方法。
Click here用于文档。
答案 1 :(得分:1)
首先,本地化元素的最佳做法是使用唯一ID。要实现这一点,您应该在Xcode中填充app元素的accessibilityIdentifier
字段。
这是识别物体的最准确方法。之后,您可以使用以下查询:
query("* id:'account_select_button'")
使用“已标记”语法的查询在应用对象的text
或accessibilityIdentifier
属性中查找匹配项。此方法不适用于多语言应用或标签更改。
对于等待元素,您应该使用此代替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语句,但即便如此,您可能还需要添加一点延迟才能使其正常工作。