From ee8b309d7e84d1200baefa5e411cacbd37230003 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Sat, 28 Feb 2015 11:40:23 +0100 Subject: [PATCH] Some stability improvements. --- .../agent_organization_profile_test.rb | 2 +- .../agent_ticket_overview_level0_test.rb | 14 +- .../agent_ticket_overview_level1_test.rb | 2 +- test/browser/prefereces_test.rb | 3 + test/browser_test_helper.rb | 125 +++++++++++++++--- 5 files changed, 116 insertions(+), 30 deletions(-) diff --git a/test/browser/agent_organization_profile_test.rb b/test/browser/agent_organization_profile_test.rb index a45796b19..e722b2d3a 100644 --- a/test/browser/agent_organization_profile_test.rb +++ b/test/browser/agent_organization_profile_test.rb @@ -38,7 +38,7 @@ class AgentOrganizationProfileTest < TestCase sleep 2 # check and change note again in edit screen - click( :css => '.active .js-action .select-arrow' ) + click( :css => '.active .js-action .select-arrow', :fast => true ) click( :css => '.active .js-action a[data-type="edit"]' ) watch_for( diff --git a/test/browser/agent_ticket_overview_level0_test.rb b/test/browser/agent_ticket_overview_level0_test.rb index 235c457eb..6829f4003 100644 --- a/test/browser/agent_ticket_overview_level0_test.rb +++ b/test/browser/agent_ticket_overview_level0_test.rb @@ -37,10 +37,12 @@ class AgentTicketOverviewLevel0Test < TestCase # select both via bulk action click( - :css => '.active table tr td input[value="' + ticket1[:id] + '"] + .checkbox', + :css => '.active table tr td input[value="' + ticket1[:id] + '"] + .checkbox', + :fast => true, ) click( - :css => '.active table tr td input[value="' + ticket2[:id] + '"] + .checkbox', + :css => '.active table tr td input[value="' + ticket2[:id] + '"] + .checkbox', + :fast => true, ) exists( :css => '.active table tr td input[value="' + ticket1[:id] + '"]:checked', @@ -60,7 +62,7 @@ class AgentTicketOverviewLevel0Test < TestCase click( :css => '.active .bulkAction .js-submit', ) - sleep 3 + sleep 6 exists_not( :css => '.active table tr td input[value="' + ticket1[:id] + '"]', @@ -95,7 +97,7 @@ class AgentTicketOverviewLevel0Test < TestCase :value => '#', ) match( - :css => '.active table th:nth-child(7)', + :css => '.active table th:nth-child(8)', :value => 'Article#', ) @@ -108,7 +110,7 @@ class AgentTicketOverviewLevel0Test < TestCase :value => '#', ) match( - :css => '.active table th:nth-child(7)', + :css => '.active table th:nth-child(8)', :value => 'Article#', ) @@ -134,7 +136,7 @@ class AgentTicketOverviewLevel0Test < TestCase :value => '#', ) exists_not( - :css => '.active table th:nth-child(7)', + :css => '.active table th:nth-child(8)', ) # create new ticket diff --git a/test/browser/agent_ticket_overview_level1_test.rb b/test/browser/agent_ticket_overview_level1_test.rb index 83d011c9f..7ccada7b2 100644 --- a/test/browser/agent_ticket_overview_level1_test.rb +++ b/test/browser/agent_ticket_overview_level1_test.rb @@ -143,7 +143,7 @@ class AgentTicketOverviewLevel1Test < TestCase ) click( :browser => browser2, - :css => '.active .ticketZoom .overview-navigator.horizontal .previous', + :css => '.active .ticketZoom .overview-navigator.horizontal .previous', ) match( diff --git a/test/browser/prefereces_test.rb b/test/browser/prefereces_test.rb index bad40182d..f0db3455c 100644 --- a/test/browser/prefereces_test.rb +++ b/test/browser/prefereces_test.rb @@ -26,6 +26,7 @@ class PreferencesTest < TestCase :value => 'English (United States)', ) click( :css => '.content button[type="submit"]' ) + sleep 2 watch_for( :css => 'body', :value => 'Language', @@ -35,10 +36,12 @@ class PreferencesTest < TestCase :value => 'Deutsch', ) click( :css => '.content button[type="submit"]' ) + sleep 2 watch_for( :css => 'body', :value => 'Sprache', ) + sleep 2 reload() watch_for( :css => 'body', diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index 1642bf408..fddd8e848 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -188,6 +188,7 @@ class TestCase < Test::Unit::TestCase click( :browser => browser1, :css => '.some_class', + :fast => false, # do not wait ) =end @@ -195,7 +196,9 @@ class TestCase < Test::Unit::TestCase def click(params) instance = params[:browser] || @browser instance.find_elements( { :css => params[:css] } )[0].click - sleep 0.5 + if !params[:fast] + sleep 0.4 + end end =begin @@ -249,14 +252,6 @@ class TestCase < Test::Unit::TestCase def set(params) instance = params[:browser] || @browser - # it's not working stable via selenium, use js - if params[:contenteditable] - #puts "---$('#{params[:css]}').html('#{params[:value]}')--" - instance.execute_script( "$('#{params[:css]}').focus().html('#{params[:value]}').trigger('change').blur()" ) - sleep 1 - return - end - element = instance.find_elements( { :css => params[:css] } )[0] #element.click element.clear @@ -274,6 +269,15 @@ class TestCase < Test::Unit::TestCase if params[:blur] instance.execute_script( "$('#{params[:css]}').blur()" ) end + + # it's not working stable via selenium, use js + if params[:contenteditable] + value = instance.find_elements( { :css => params[:css] } )[0].text + if value != params[:value] + instance.execute_script( "$('#{params[:css]}').focus().html('#{params[:value]}').trigger('focusout')" ) + end + end + sleep 0.5 end @@ -376,7 +380,7 @@ class TestCase < Test::Unit::TestCase def match(params) instance = params[:browser] || @browser - element = instance.find_elements( { :css => params[:css] } )[0] + element = instance.find_elements( { :css => params[:css] } )[0] if params[:css] =~ /select/ dropdown = Selenium::WebDriver::Support::Select.new(element) @@ -402,12 +406,25 @@ class TestCase < Test::Unit::TestCase end # match on attribute - if params[:attribute] - text = element.attribute( params[:attribute] ) - elsif params[:css] =~ /(input|textarea)/i - text = element.attribute('value') - else - text = element.text + begin + if params[:attribute] + text = element.attribute( params[:attribute] ) + elsif params[:css] =~ /(input|textarea)/i + text = element.attribute('value') + else + text = element.text + end + rescue + + # just try again + element = instance.find_elements( { :css => params[:css] } )[0] + if params[:attribute] + text = element.attribute( params[:attribute] ) + elsif params[:css] =~ /(input|textarea)/i + text = element.attribute('value') + else + text = element.text + end end match = false if params[:no_quote] @@ -430,7 +447,7 @@ class TestCase < Test::Unit::TestCase end end sleep 0.8 - return match + match end =begin @@ -505,11 +522,35 @@ class TestCase < Test::Unit::TestCase raise "not matching name '#{params[:name]}' in cookie '#{cookies.to_s}'" end +=begin + + file_upload( + :browser => browser1, + :css => '#content .text-1', + :value => 'some text', + ) + +=end + + def file_upload(params = {}) + instance = params[:browser] || @browser + + filename = 'some-file.txt' + file = File.join(Dir.pwd, filename) + #file = 'some test lalal' + + element = instance.find_elements( { :css => params[:css] } )[0].send_keys file + #instance.find_elements( { :css => params[:css] } )[0] + #element + #@driver.find_element(id: 'file-submit').click + + end + =begin watch_for( :browser => browser1, - :css => true, + :css => '#content .text-1', :value => 'some text', :attribute => 'some_attribute' # optional :timeout => '16', # in sec, default 16 @@ -557,7 +598,7 @@ class TestCase < Test::Unit::TestCase watch_for_disappear( :browser => browser1, - :css => true, + :css => '#content .text-1', :timeout => '16', # in sec, default 16 ) @@ -571,7 +612,7 @@ class TestCase < Test::Unit::TestCase timeout = params[:timeout] end loops = (timeout).to_i - text = '' + text = '' (1..loops).each { |loop| element = instance.find_elements( { :css => params[:css] } )[0] if !element #|| element.displayed? @@ -646,6 +687,7 @@ class TestCase < Test::Unit::TestCase instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click instance.find_elements( { :css => 'a[href="#manage/overviews"]' } )[0].click + sleep 0.2 instance.find_elements( { :css => '#content a[data-type="new"]' } )[0].click sleep 2 @@ -746,18 +788,43 @@ class TestCase < Test::Unit::TestCase element = instance.find_elements( { :css => '.active .newTicket div[data-name=body]' } )[0] element.clear element.send_keys( data[:body] ) + + # it's not working stable via selenium, use js + value = instance.find_elements( { :css => '.content .newTicket div[data-name=body]' } )[0].text + puts "V #{value.inspect}" + if value != data[:body] + instance.execute_script( "$('.content.active div[data-name=body]').html('#{data[:body]}').trigger('focusout')" ) + end end if data[:customer] element = instance.find_elements( { :css => '.active .newTicket input[name="customer_id_completion"]' } )[0] element.click element.clear + + # workaround, sometimes focus is not triggered element.send_keys( data[:customer] ) sleep 4 + + # check if pulldown is open, it's not working stable via selenium + res = instance.execute_script( "$('.active .newTicket .js-recipientDropdown').hasClass('open')" ) + puts "res #{res.inspect}" + if !res + puts "IS NOT OPEN!, open it" + instance.execute_script( "$('.active .newTicket .js-recipientDropdown').addClass('open')" ) + end element.send_keys( :arrow_down ) - sleep 0.1 + sleep 0.3 instance.find_elements( { :css => '.active .newTicket .recipientList-entry.js-user.is-active' } )[0].click sleep 0.3 end + + + #file_upload( + # :browser => instance, + # :css => '#content .text-1', + # :value => 'some text', + #) + if params[:do_not_submit] assert( true, "ticket created without submit" ) return @@ -839,6 +906,14 @@ class TestCase < Test::Unit::TestCase element = instance.find_elements( { :css => '.content.active div[data-name=body]' } )[0] element.clear element.send_keys( data[:body] ) + + # it's not working stable via selenium, use js + value = instance.find_elements( { :css => '.content.active div[data-name=body]' } )[0].text + puts "V #{value.inspect}" + if value != data[:body] + instance.execute_script( "$('.content.active div[data-name=body]').html('#{data[:body]}').trigger('focusout')" ) + end + end if data[:group] @@ -917,7 +992,9 @@ class TestCase < Test::Unit::TestCase if number !~ /#{params[:number]}/ raise "unable to search/find ticket #{params[:number]}!" end + sleep 1 assert( true, "ticket #{params[:number]} found" ) + true end =begin @@ -960,6 +1037,8 @@ class TestCase < Test::Unit::TestCase if number !~ /#{params[:number]}/ raise "unable to search/find ticket #{params[:number]}!" end + sleep 1 + true end =begin @@ -989,7 +1068,7 @@ class TestCase < Test::Unit::TestCase #puts element.inspect } overviews.each {|url, value| - count = instance.find_elements( { :css => ".content.active .sidebar a[href=\"#{url}\"] .badge" } )[0].text + count = instance.find_elements( { :css => ".content.active .sidebar a[href=\"#{url}\"] .badge" } )[0].text overviews[url] = count.to_i } overviews @@ -1031,6 +1110,7 @@ class TestCase < Test::Unit::TestCase return end assert( true, "org #{params[:value]} found" ) + sleep 2 true end @@ -1057,6 +1137,7 @@ class TestCase < Test::Unit::TestCase raise "unable to search/find user #{params[:value]}!" end assert( true, "user #{params[:term]} found" ) + sleep 2 true end