2016-08-10 64 views
0

我正在尝试通过Android应用程序滚动以查找特定元素。下面是滚动码:但是使用Appium + Ruby在Android中滚动使用Appium + Ruby滚动

def self.swipe_to (programme) 
    begin 
    scroll_to(programme) 
    rescue 
    puts 'unable to find ' + programme 
    return false 
    end 
    return true 
end 

滚动工作正常,问题是应用程序滚动到程序,但一旦程序被发现,应用程序向后滚动到列表的顶部。 然后抛出一个错误,说元素找不到。

有没有人见过类似的问题?发现程序后,有没有办法停止滚动?一旦程序被找到,我只想停止滚动回到顶部。请帮忙。

+0

你检查元素的知名度? – juhlila

+0

最初元素不可见,这就是为什么我必须滚动。一旦元素可见,滚动就会停止,但滚动会以相反的顺序自动开始并停止在页面的顶部。此时,元素再次变得不可见。 – Anshul

+0

检查我的答案是否会对您有所帮助 – juhlila

回答

0

我创建了一个方法来滚动到还没有在屏幕上的元素,因为scroll_to不适合我。这methos滚动到任何元素在屏幕上,即使它尚不可见

def scroll_to_element(class_name, element_name) 
    ele_by_json(typeArray: [class_name], onlyVisible: false, name: {target: element_name, substring: false, insensitive: false}) 
end 
+0

我正在尝试使用您的方法,但我收到未定义的方法'ele_by_json'错误(NoMethodError)。请注意,我试图自动化Android应用程序。在互联网上搜索后,我也尝试过“ele_by_json_visible_contains”,但没有运气:( – Anshul

+0

''ele_by_json'只适用于ios,但您可以尝试其他方法https://github.com/appium/ruby_lib/blob/master/ lib/appium_lib/android/element/generic.rb – juhlila

+0

我试过查找并找到确切的,但问题在于它只能找到当前在屏幕上可见的元素,如果元素在屏幕上不可见,则会观察到NoSuchElementError 。 – Anshul

0

下面的代码为我工作:

def scrollTo el_start, el_end 
    #get element coordinates start 
    el_start = $driver.find_element(:id, el_start) 
    screen_x_start = el_start.location.x 
    screen_y_start = el_start.location.y 
    #get element coordinates end 
    el_end = $driver.find_element(:id, el_end) 
    screen_x_end = el_end.location.x 
    screen_y_end = el_end.location.y 
    Appium::TouchAction.new.swipe(start_x: screen_x_start, start_y: screen_y_start, delta_x: screen_x_end, delta_y: screen_y_end).perform 
end 
相关问题