# By default "get_list_item_text" returns an array of arrays of text for each entry in the first ListView # The "get_list_item_text" action also supports: # (all items of 2nd list) performAction( 'get_list_item_text', '2' ) # (1st item of 2nd list) performAction( 'get_list_item_text', '2' , '1' ) Then /^I should see following list:$/ do | expected_table | result = performAction('get_list_item_text') response_table = result['bonusInformation'] response_table.each_with_index do | row_data, index | row_data = JSON.parse( row_data ) response_table[index] = row_data end expected_table.diff!(response_table) end # Note: This step is currently intended as more of an example rather than a rock-solid, well-tested step. # (The server implementation works well for me, but my test steps that use it are application-specific) # Similarly to the "get_list_item_text" action, the "get_list_item_properties" action defaults to # all rows of the first ListView, but can be instructed to target a specific row (or all rows) of a specific ListView. # Example TextView row: {"id":"title", "text":"My Title", "color":0, "background":0, "compoundDrawables":["left"]} # Example ViewGroup row: {"children":[{"id":"title", "text":"My Title"}, {"id":"subtitle", "text":"Second line"}]} # Example TableLayout row: {"cells":[{"column":0, "id":"colA", "text": "This is a Test"}]} Then /^The "([^\"]*)" for row (\d+) should be "([^\"]*)"$/ do | view_id, row, value | response = performAction( 'get_list_item_properties', '1' , row )['bonusInformation'] response = JSON.parse( response[0] ) if( response['children'] ) found_id = false response['children'] each do | view | if( view['id'] == view_id ) raise "Text is #{view['text']}, expected #{value}" unless( view['text'] == value ) found_id = true end end raise "Could not find view with ID: #{view_id}" unless( found_id ) else raise "ID is #{response['id']}, expected #{view_id}" unless( response['id'] == view_id ) raise "Text is #{response['text']}, expected #{view_id}" unless( response['text'] == value ) end end