[英]Is it possible to touch an “invisible” element on 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
您必須使用javascript
或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.