Class: RAutomation::Adapter::MsUia::SelectList

Inherits:
Control
  • Object
show all
Includes:
Locators, WaitHelper
Defined in:
lib/rautomation/adapter/ms_uia/select_list.rb

Defined Under Namespace

Classes: SelectListOption

Instance Method Summary collapse

Methods inherited from Control

#assert_enabled, #bounding_rectangle, #click, #control_class, #control_name, #disabled?, #enabled?, #get_current_control_type, #has_focus?, #hwnd, #matches_type?, #new_pid, #set_focus, #uia_element, #visible?

Constructor Details

#initialize(window, locators) ⇒ SelectList

todo - replace with UIA version



35
36
37
38
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 35

def initialize(window, locators)
  super
  @hwnd = Functions.control_hwnd(@window.hwnd, @locators)
end

Instance Method Details

#control_hwnd



77
78
79
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 77

def control_hwnd
  @hwnd
end

#dropbox_boundary



89
90
91
92
93
94
95
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 89

def dropbox_boundary
  boundary = FFI::MemoryPointer.new :long, 4

  Functions.send_message(@hwnd, Constants::CB_GETDROPPEDCONTROLRECT, 0 ,boundary)

  boundary.read_array_of_long(4)
end

#exist?Boolean Also known as: exists?

Returns:

  • (Boolean)


105
106
107
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 105

def exist?
  super && matches_type?(Constants::UIA_COMBOBOX_CONTROL_TYPE)
end

#get_top_index



97
98
99
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 97

def get_top_index
  Functions.send_message(@hwnd, Constants::CB_GETTOPINDEX, 0 ,nil)
end

#list_item_height



85
86
87
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 85

def list_item_height
  Functions.send_message(@hwnd, Constants::CB_GETITEMHEIGHT, 0 ,nil)
end

#option(options)

todo - replace with UIA version



68
69
70
71
72
73
74
75
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 68

def option(options)
  item_count.times do |item_no|
    item = Functions.retrieve_combobox_item_text(@hwnd, item_no)
    return SelectListOption.new(self, item, item_no) if options[:text] == item
  end

  nil
end

#options(options = {})

todo - replace with UIA version



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 46

def options(options = {})
  items = []

  item_count.times do |item_no|
    item = Functions.retrieve_combobox_item_text(@hwnd, item_no)

    if options[:text]
      items.push(SelectListOption.new(self, item, item_no)) if options[:text] == item
    else
      items.push(SelectListOption.new(self, item, item_no))
    end
  end

  items
end

#scroll_to_item(row)



101
102
103
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 101

def scroll_to_item(row)
  Functions.send_message(@hwnd, Constants::CB_SETTOPINDEX , row ,nil)
end

#select(index)



81
82
83
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 81

def select(index)
  Functions.send_message(@hwnd, Constants::CB_SETCURSEL, index, nil) != Constants::CB_ERR
end

#set(value)



40
41
42
43
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 40

def set(value)
  list      = UiaDll::element_from_handle(@hwnd)
  UiaDll::set_value(list, value)
end

#value



62
63
64
65
# File 'lib/rautomation/adapter/ms_uia/select_list.rb', line 62

def value
  selected_option = options.find { |option| option.selected? }
  selected_option ? selected_option.text : ""
end