我想编写等待函数,直到某些屏幕显示在ruby中

时间:2015-05-18 07:50:13

标签: ruby cucumber wait appium

我正在使用红宝石中的Cucumber-Appium进行android app测试自动化。

我想写一个等待函数,它应该等到显示下一页。

我尝试了几种方法,但它没有用。

代码:

And (/^I wait till '(.*)' appears$/) do |next_page|
    $i=1
    while $i==1 do
    if ObjectSpace.const_get('next_page').new.identity? 
        $current_page = $current_page.change_page('next_page')
        $i=0
    else
    wait_secs(1)
    end
end

任何人都可以提出建议吗?

1 个答案:

答案 0 :(得分:0)

每当我写一个超时方法时,我都希望通过该块直到它超时或解析为true。基本上,我希望它看起来像这样:

timer { ObjectSpace.const_get('NextPage').new.identity? }

所以我的方法如下:

def timer(t = 5, &block)
  timeout = Time.now + t
  until Time.now > timeout
    result = yield
    return result if result
    sleep 0.5
  end
  raise "Timer failed after #{t} seconds"
end

此方法循环遍历我的块,直到yield返回真值。它将休眠半秒并在t秒后超时,默认为5.如果您希望它返回false而不是引发错误,您只需将最后一行更改为{ {1}}。

我不熟悉appium来编写块来检查你的下一页,但我想它看起来与我上面的第一个代码示例类似。