class AX::Menu
UI element representing a menu. Not much to it…
Public Instance Methods
item(filters = {})
click to toggle source
Search the menu for a ‘menu_item` that matches the given filters. The filters should be specified just as they would be when calling {#search}.
@param [Hash] filters @yield Optional block used for search filtering @return [AX::Element]
# File lib/ax/menu.rb, line 65 def item filters = {}, &block result = self.search :menu_item, filters, &block return result unless result.blank? raise Accessibility::SearchFailure.new(self, :menu_item, filters, &block) end
scroll_to(element)
click to toggle source
Scroll the menu until the given element, which must be in the menu is visible in the bounds of the menu. This method will also move the mouse pointer to the given element.
If you need to scroll an unknown number of units through a menu, you can just pass the element that you need visible and this method will scroll to it for you.
@example
click window.pop_up do menu = pop_up.menu menu.scroll_to menu.item(title: "Expensive Cake") end
@param [AX::Element] element @return [void]
# File lib/ax/menu.rb, line 26 def scroll_to element Mouse.move_to self.to_point # calculate which scroll arrow to move to fudge_factor = self.item.size.height * 0.1 point = self.position size = self.size point.x += size.width / 2 point.y += if element.position.y > point.y size.height - fudge_factor else fudge_factor end # scroll until element is visible until NSContainsRect(self.bounds, element.bounds) Mouse.move_to point end start = Time.now until Time.now - start > 5 # Sometimes the little arrow bars in menus covering # up the menu item and we have to move just a bit more. if self.application.element_at(Mouse.current_position) != element Mouse.move_to element.to_point else break end end end