2017-04-14 46 views
1

我需要一些严重的帮助。当我将触摸命令输入到calabash-ios控制台时,它的工作原理与所有情况一样。例如,葫芦触摸命令在葫芦岛控制台工作,但不是在运行时

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

完全按照它应该的那样工作。

但是,当我真的用完全相同的命令运行测试时,它不起作用。它根本不会抛出任何错误,但应该由按钮点击启动的操作不会发生。而令我感到沮丧的是,没完没了......真正令我难过的是,这不是一个一致的问题,有时触控命令可以正常工作,有时候却不行。

是否有其他人有类似的问题,如果是这样,你是否能够发现问题是什么?

在此先感谢! Ade

回答

0

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

0

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

Click here为文档。

1

首先,本地化元素的最佳做法是使用唯一ID。要做到这一点,您应该填写Xcode中应用程序元素的accessibilityIdentifier字段。

这是识别对象的最准确的方法。之后,你可以使用查询这样的:

query("* id:'account_select_button'") 

查询使用的“标记”语法寻找应用程序对象的textaccessibilityIdentifier特性匹配。此方法不适用于多语言应用程序或标签更改。

对于等待元素,你应该使用这个的sleep

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

默认情况下,葫芦查询仅搜索可见对象的属性。如果一个元素是视域之外,需要滚动,直到出现元素之前,你可以用它做任何事情:

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'")