簡體   English   中英

calabash-android滾動到元素

[英]calabash-android scroll to element

我正在使用calabash-android為Android應用程序編寫一些測試用例。

我找到元素的第一個想法是向下滾動直到找到這樣的元素:

Then /^I enter "([^\"]*)" into the input field with id "([^\"]*)"$/ do |text, id|
    q = query("EditText id:'#{id}'")
    while q.empty?
        scroll_down
        q = query("EditText id:'#{id}'")
    end
    enter_text("android.widget.EditText id:'#{id}'", text)
end

但是,如果頁面發生更改,並且我已經以這種方式滾動經過了元素,我將找不到我要搜索的元素。 因此,第二個想法是以這種方式進行搜索:

Then /^I enter "([^\"]*)" into the input field with id "([^\"]*)"$/ do |text, id|
    q = query("EditText id:'#{id}'")
    while q.empty?
        scroll_down
        q = query("EditText id:'#{id}'")
    end
    while q.empty?
        scroll_up
        q = query("EditText id:'#{id}'")
    end
    enter_text("android.widget.EditText id:'#{id}'", text)
end

但是我不知道如何檢查頁面的結尾,我希望有一種更好的方法來搜索元素,然后向下滾動到頁面底部,然后再次向上滾動。

所以我的兩個問題是:有沒有更好的選擇?如果沒有,我是否發現自己位於頁面的底部/頂部?

編輯:感謝您的提醒,我幾乎同意了您的想法jmoody。

我將以這種方式進行操作:

Then /^I enter "([^\"]*)" into the input field with id "([^\"]*)"$/ do |text, id|
    q = query("EditText id:'#{id}'")
    counter = 0
    while q.empty?
        break if counter == 5
        scroll_down
        q = query("EditText id:'#{id}'")
        counter = counter + 1
    end
    if counter == 5
        fail("The button with the id:'#{id}' could not be found")
    else
        enter_text("EditText id:'#{id}'", text)
    end
end

我沒有Calabash Android的示例,但這是Calabash iOS的示例-概念相同。 這不是理想的解決方案。

  • 如果頁面增加,則需要增加計數器。
  • 我們無法確定從哪里開始滾動。 我們的測試假設我們總是從頭開始。 也許您可以這樣做?

https://github.com/calabash/ios-webview-test-app/tree/master/CalWebViewApp/features


  Scenario: Query UIWebView with css
    Given I am looking at the UIWebView tab
    And I can query for the body with css

  Then(/^I can query for the body with css$/) do
    page(WebViewApp::TabBar).with_active_page do |page|
    qstr = page.query_str("css:'body'")
    visible = lambda {
      query(qstr).count == 1
    }

    counter = 0
    loop do
      break if visible.call || counter == 6
      scroll(page.query_str, :down)
      step_pause
      counter = counter + 1
    end
    res = query(qstr)
    expect(res.count).to be == 1
  end
end

如果控制頁面上的html,則可以添加隱藏元素以標記頁面的頂部和底部。

更新

我喜歡Aravin的答案,並在CalWebApp中進行了嘗試

js = "window.scrollTo(0,0)"
query(tab_name, {calabashStringByEvaluatingJavaScript:js})
wait_for_none_animating

您必須使用javascriptjquery方法來執行此操作。

使用jQuery滾動到元素

evaluate_javascript(query_string, javascript)

例:

evaluate_javascript('EditText', '#{id}.ScrollTO()')

滾動到頂部

evaluate_javascript('EditText', 'scrollTop()')

您可以在此處找到更多詳細信息: http : //www.rubydoc.info/gems/calabash-android/0.5.8/Calabash/Android/Operations : evaluate_javascript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM