From 309369090b3b3ed0ec6d67970e601646a902d139 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 2 Mar 2015 00:16:36 +0100 Subject: [PATCH] Improved speed of tests. --- test/browser/aaa_getting_started_test.rb | 619 ++++++-------- .../agent_ticket_actions_level5_test.rb | 618 ++++++-------- .../agent_ticket_overview_level0_test.rb | 34 +- test/browser_test_helper.rb | 807 +++--------------- 4 files changed, 701 insertions(+), 1377 deletions(-) diff --git a/test/browser/aaa_getting_started_test.rb b/test/browser/aaa_getting_started_test.rb index 1d62a2031..f4b60f8c3 100644 --- a/test/browser/aaa_getting_started_test.rb +++ b/test/browser/aaa_getting_started_test.rb @@ -11,229 +11,156 @@ class AaaGettingStartedTest < TestCase end mailbox_user = ENV['MAILBOX_INIT'].split(':')[0] mailbox_password = ENV['MAILBOX_INIT'].split(':')[1] - tests = [ - { - :name => 'start', - :instance => browser_instance, - :url => browser_url + '/', - :action => [ - { - :execute => 'check', - :css => '.setup.wizard', - :result => true, - }, - ], - }, - { - :name => 'getting started - master agent', - :action => [ - { - :execute => 'click', - :css => '.js-start .btn--primary', - }, - { - :execute => 'set', - :css => '.js-admin input[name="firstname"]', - :value => 'Test Master', - }, - { - :execute => 'set', - :css => '.js-admin input[name="lastname"]', - :value => 'Agent', - }, - { - :execute => 'set', - :css => '.js-admin input[name="email"]', - :value => 'master@example.com', - }, - { - :execute => 'set', - :css => '.js-admin input[name="password"]', - :value => 'test1234äöüß', - }, - { - :execute => 'set', - :css => '.js-admin input[name="password_confirm"]', - :value => 'test1234äöüß', - }, - { - :execute => 'click', - :css => '.js-admin .btn--success', - }, - { - :execute => 'watch_for', - :area => '.js-base h2', - :value => 'Organization', - }, - ], - }, + @browser = browser_instance + location( :url => browser_url ) + watch_for( + :css => '.setup.wizard', + :value => 'setup new system', + ) + click( :css => '.js-start .btn--primary' ) + set( + :css => '.js-admin input[name="firstname"]', + :value => 'Test Master', + ) + set( + :css => '.js-admin input[name="lastname"]', + :value => 'Agent', + ) + set( + :css => '.js-admin input[name="email"]', + :value => 'master@example.com', + ) + set( + :css => '.js-admin input[name="firstname"]', + :value => 'Test Master', + ) + set( + :css => '.js-admin input[name="password"]', + :value => 'test1234äöüß', + ) + set( + :css => '.js-admin input[name="password_confirm"]', + :value => 'test1234äöüß', + ) + click( :css => '.js-admin .btn--success' ) + watch_for( + :css => '.js-base h2', + :value => 'Organization', + ) - # set base - { - :name => 'getting started - base', - :action => [ - { - :execute => 'match', - :css => '.js-base h2', - :value => 'Organization', - :match_result => true, - }, - { - :execute => 'set', - :css => '.js-base input[name="organization"]', - :value => 'Some Organization', - }, - { - :execute => 'set', - :css => '.js-base input[name="url"]', - :value => 'some host', - }, - { - :execute => 'click', - :css => '.js-base .btn--primary', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'A URL looks like', - }, - { - :execute => 'set', - :css => '.js-base input[name="url"]', - :value => 'http://localhost:3333', - }, - { - :execute => 'click', - :css => '.js-base .btn--primary', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'channel', - }, - { - :execute => 'check', - :element => :url, - :result => '#getting_started/channel', - }, - ], - }, + # getting started - base + match( + :css => '.js-base h2', + :value => 'Organization', + ) + set( + :css => '.js-base input[name="organization"]', + :value => 'Some Organization', + ) + set( + :css => '.js-base input[name="url"]', + :value => 'some host', + ) + click( + :css => '.js-base .btn--primary', + ) + watch_for( + :css => 'body', + :value => 'A URL looks like', + ) + set( + :css => '.js-base input[name="url"]', + :value => 'http://localhost:3333', + ) + click( + :css => '.js-base .btn--primary', + ) + watch_for( + :css => 'body', + :value => 'channel', + ) + location_check( + :url => '#getting_started/channel', + ) - # create email account - { - :name => 'getting started - base', - :action => [ - { - :execute => 'match', - :css => '.js-channel h2', - :value => 'Connect Channels', - :match_result => true, - }, - { - :execute => 'click', - :css => '.js-channel .email .provider_name', - }, - { - :execute => 'set', - :css => '.js-intro input[name="realname"]', - :value => 'Some Realname', - }, - { - :execute => 'set', - :css => '.js-intro input[name="email"]', - :value => mailbox_user, - }, - { - :execute => 'set', - :css => '.js-intro input[name="password"]', - :value => mailbox_password, - }, - { - :execute => 'click', - :css => '.js-intro .btn--primary', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'verify', - :timeout => 20, - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'invite', - :timeout => 100, - }, - { - :execute => 'check', - :element => :url, - :result => '#getting_started/agents', - }, - ], - }, + # getting started - create email account + match( + :css => '.js-channel h2', + :value => 'Connect Channels', + ) + click( + :css => '.js-channel .email .provider_name', + ) + set( + :css => '.js-intro input[name="realname"]', + :value => 'Some Realname', + ) + set( + :css => '.js-intro input[name="email"]', + :value => mailbox_user, + ) + set( + :css => '.js-intro input[name="password"]', + :value => mailbox_password, + ) + click( + :css => '.js-intro .btn--primary', + ) + watch_for( + :css => 'body', + :value => 'verify', + :timeout => 20, + ) + watch_for( + :css => 'body', + :value => 'invite', + :timeout => 100, + ) + location_check( + :url => '#getting_started/agents', + ) - # invite agent1 - { - :name => 'getting started - agent 1', - :action => [ - { - :execute => 'match', - :css => 'body', - :value => 'Invite', - :match_result => true, - }, - { - :execute => 'set', - :css => '.js-agent input[name="firstname"]', - :value => 'Agent 1', - }, - { - :execute => 'set', - :css => '.js-agent input[name="lastname"]', - :value => 'Test', - }, - { - :execute => 'set', - :css => '.js-agent input[name="email"]', - :value => 'agent1@example.com', - }, - { - :execute => 'click', - :css => '.js-agent input[name="group_ids"][value="1"]', - }, - { - :execute => 'click', - :css => '.js-agent .btn--success', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'Invitation sent', - }, - { - :execute => 'check', - :element => :url, - :result => '#getting_started/agents', - }, - { - :execute => 'click', - :css => '.js-agent .btn--primary', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'My Stats', - }, - { - :execute => 'check', - :element => :url, - :result => '#dashboard', - }, - ], - }, - ] - browser_single_test(tests) + # invite agent1 + match( + :css => 'body', + :value => 'Invite', + ) + set( + :css => '.js-agent input[name="firstname"]', + :value => 'Agent 1', + ) + set( + :css => '.js-agent input[name="lastname"]', + :value => 'Test', + ) + set( + :css => '.js-agent input[name="email"]', + :value => 'agent1@example.com', + ) + click( + :css => '.js-agent input[name="group_ids"][value="1"]', + ) + click( + :css => '.js-agent .btn--success', + ) + watch_for( + :css => 'body', + :value => 'Invitation sent', + ) + location_check( + :url => '#getting_started/agents', + ) + click( + :css => '.js-agent .btn--primary', + ) + watch_for( + :css => 'body', + :value => 'My Stats', + ) + location_check( + :url => '#dashboard', + ) end def test_b_accounts_auto @@ -255,59 +182,47 @@ class AaaGettingStartedTest < TestCase puts "NOTICE: Need min. MAILBOX_AUTO1 as ENV variable like export MAILBOX_AUTO1='nicole.braun2015@gmail.com:somepass'" return end + @browser = browser_instance + login( + :username => 'master@example.com', + :password => 'test', + :url => browser_url, + ) accounts.each {|account| - tests = [ - { - :name => 'getting started - auto mail', - :action => [ - { - :execute => 'navigate', - :to => browser_url + '/#getting_started/channel', - }, - { - :execute => 'click', - :css => '.js-channel .email .provider_name', - }, - { - :execute => 'set', - :css => '.js-intro input[name="realname"]', - :value => account[:realname], - }, - { - :execute => 'set', - :css => '.js-intro input[name="email"]', - :value => account[:email], - }, - { - :execute => 'set', - :css => '.js-intro input[name="password"]', - :value => account[:password], - }, - { - :execute => 'click', - :css => '.js-intro .btn--primary', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'verify', - :timeout => 20, - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'invite', - :timeout => 100, - }, - { - :execute => 'check', - :element => :url, - :result => '#getting_started/agents', - }, - ], - }, - ] - browser_signle_test_with_login(tests, { :username => 'master@example.com' }) + + # getting started - auto mail + location( :url => browser_url + '/#getting_started/channel' ) + click( + :css => '.js-channel .email .provider_name', + ) + set( + :css => '.js-intro input[name="realname"]', + :value => account[:realname], + ) + set( + :css => '.js-intro input[name="email"]', + :value => account[:email], + ) + set( + :css => '.js-intro input[name="password"]', + :value => account[:password], + ) + click( + :css => '.js-intro .btn--primary', + ) + watch_for( + :css => 'body', + :value => 'verify', + :timeout => 20, + ) + watch_for( + :css => 'body', + :value => 'invite', + :timeout => 100, + ) + location_check( + :url => '#getting_started/agents', + ) } end @@ -339,98 +254,78 @@ class AaaGettingStartedTest < TestCase return end + @browser = browser_instance + login( + :username => 'master@example.com', + :password => 'test', + :url => browser_url, + ) accounts.each {|account| - tests = [ - { - :name => 'getting started - manual mail', - :action => [ - { - :execute => 'navigate', - :to => browser_url + '/#getting_started/channel', - }, - { - :execute => 'click', - :css => '.js-channel .email .provider_name', - }, - { - :execute => 'set', - :css => '.js-intro input[name="realname"]', - :value => account[:realname], - }, - { - :execute => 'set', - :css => '.js-intro input[name="email"]', - :value => account[:email], - }, - { - :execute => 'set', - :css => '.js-intro input[name="password"]', - :value => account[:password], - }, - { - :execute => 'click', - :css => '.js-intro .btn--primary', - }, - { - :execute => 'watch_for', - :area => '.js-inbound h2', - :value => 'inbound', - :timeout => 220, - }, - { - :execute => 'watch_for', - :area => '.js-inbound', - :value => 'manual', - }, - { - :execute => 'set', - :css => '.js-inbound input[name="options::host"]', - :value => account[:inbound]['options::host'], - }, - { - :execute => 'click', - :css => '.js-inbound .btn--primary', - }, - { - :execute => 'watch_for', - :area => '.js-outbound h2', - :value => 'outbound', - }, - { - :execute => 'select', - :css => '.js-outbound select[name="adapter"]', - :value => 'SMTP - configure your own outgoing SMTP settings', - }, - { - :execute => 'set', - :css => '.js-outbound input[name="options::host"]', - :value => account[:outbound]['options::host'], - }, - { - :execute => 'click', - :css => '.js-outbound .btn--primary', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'verify', - }, - { - :execute => 'watch_for', - :area => 'body', - :value => 'invite', - :timeout => 190, - }, - { - :execute => 'check', - :element => :url, - :result => '#getting_started/agents', - }, - ], - }, - ] - browser_signle_test_with_login(tests, { :username => 'master@example.com' }) + + # getting started - manual mail + location( :url => browser_url + '/#getting_started/channel' ) + + click( + :css => '.js-channel .email .provider_name', + ) + set( + :css => '.js-intro input[name="realname"]', + :value => account[:realname], + ) + set( + :css => '.js-intro input[name="email"]', + :value => account[:email], + ) + set( + :css => '.js-intro input[name="password"]', + :value => account[:password], + ) + click( + :css => '.js-intro .btn--primary', + ) + watch_for( + :css => '.js-inbound h2', + :value => 'inbound', + :timeout => 220, + ) + watch_for( + :css => '.js-inbound', + :value => 'manual', + ) + set( + :css => '.js-inbound input[name="options::host"]', + :value => account[:inbound]['options::host'], + ) + click( + :css => '.js-inbound .btn--primary', + ) + watch_for( + :css => '.js-outbound h2', + :value => 'outbound', + ) + select( + :css => '.js-outbound select[name="adapter"]', + :value => 'SMTP - configure your own outgoing SMTP settings', + ) + set( + :css => '.js-outbound input[name="options::host"]', + :value => account[:outbound]['options::host'], + ) + click( + :css => '.js-outbound .btn--primary', + ) + watch_for( + :css => 'body', + :value => 'verify', + ) + watch_for( + :css => 'body', + :value => 'invite', + :timeout => 190, + ) + location_check( + :url => '#getting_started/agents', + ) } end - end \ No newline at end of file diff --git a/test/browser/agent_ticket_actions_level5_test.rb b/test/browser/agent_ticket_actions_level5_test.rb index 0fa2cb90b..0c2796945 100644 --- a/test/browser/agent_ticket_actions_level5_test.rb +++ b/test/browser/agent_ticket_actions_level5_test.rb @@ -3,6 +3,7 @@ require 'browser_test_helper' class AgentTicketActionLevel5Test < TestCase def test_agent_signature_check + suffix = rand(99999999999999999).to_s signature_name1 = 'sig name 1 äöüß ' + suffix signature_body1 = "--\nsig body 1 äöüß " + suffix @@ -12,351 +13,290 @@ class AgentTicketActionLevel5Test < TestCase group_name2 = "group name 2 " + suffix group_name3 = "group name 3 " + suffix - tests = [ - { - :name => 'create groups and signatures', - :action => [ + @browser = browser_instance + login( + :username => 'master@example.com', + :password => 'test', + :url => browser_url, + ) + tasks_close_all() - { - :execute => 'close_all_tasks', - }, + # + # create groups and signatures + # - # create signatures - { - :execute => 'create_signature', - :name => signature_name1, - :body => signature_body1, - }, - { - :execute => 'create_signature', - :name => signature_name2, - :body => signature_body2, - }, - - # create groups - { - :execute => 'create_group', - :name => group_name1, - :signature => signature_name1, - :member => [ - 'master@example.com' - ], - }, - { - :execute => 'create_group', - :name => group_name2, - :signature => signature_name2, - :member => [ - 'master@example.com' - ], - }, - { - :execute => 'create_group', - :name => group_name3, - :member => [ - 'master@example.com' - ], - }, - ], + # create signatures + signature_create( + :data => { + :name => signature_name1, + :body => signature_body1, }, - { - :name => 'check signature in new ticket', - :action => [ - - # reload instances to get new group permissions - { - :execute => 'reload', - }, - - { - :execute => 'create_ticket', - :group => 'Users', - :subject => 'some subject 4 - 123äöü', - :body => 'some body 4 - 123äöü', - :do_not_submit => true, - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # select group - { - :execute => 'select', - :css => '.active [name="group_id"]', - :value => group_name1, - }, - - # select group - { - :execute => 'select', - :css => '.active [name="group_id"]', - :value => group_name1, - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # check signature - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => false, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, - - # select create channel - { - :execute => 'click', - :css => '.active [data-type="email-out"]', - }, - - # select group - { - :execute => 'select', - :css => '.active select[name="group_id"]', - :value => group_name1, - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # check signature - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => true, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, - - # select group - { - :execute => 'select', - :css => '.active select[name="group_id"]', - :value => group_name2, - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # check signature - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => false, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => true, - }, - - # select group - { - :execute => 'select', - :css => '.active select[name="group_id"]', - :value => group_name3, - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # check signature - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => false, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, - - - # select group - { - :execute => 'select', - :css => '.active select[name="group_id"]', - :value => group_name1, - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # check signature - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => true, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, - - # select create channel - { - :execute => 'click', - :css => '.active [data-type="phone-out"]', - }, - - # check content - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => 'some body 4', - :no_quote => true, - :match_result => true, - }, - - # check signature - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => false, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, - ], + ) + signature_create( + :data => { + :name => signature_name2, + :body => signature_body2, }, - { - :name => 'check signature in zoom ticket', - :action => [ - - { - :execute => 'create_ticket', - :group => group_name1, - :subject => 'some subject 5 - 123äöü', - :body => 'some body 5 - 123äöü', - }, - { - :execute => 'wait', - :value => 3, - }, - - # execute reply - { - :execute => 'click', - :css => '.active [data-type="reply"]', - }, - - # check if signature exists - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => true, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, - - # discard changes - { - :execute => 'click', - :css => '.active .js-reset', - }, - { - :execute => 'wait', - :value => 3, - }, - - # check if signature exists - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body1, - :no_quote => true, - :match_result => false, - }, - { - :execute => 'match', - :css => '.active [data-name="body"]', - :value => signature_body2, - :no_quote => true, - :match_result => false, - }, + ) + # create groups + group_create( + :data => { + :name => group_name1, + :signature => signature_name1, + :member => [ + 'master@example.com' ], + } + ) + group_create( + :data => { + :name => group_name2, + :signature => signature_name2, + :member => [ + 'master@example.com' + ], + } + ) + group_create( + :data => { + :name => group_name3, + :member => [ + 'master@example.com' + ], + } + ) + + # + # check signature in new ticket + # + + # reload instances to get new group permissions + reload() + + # create ticket + ticket_create( + :data => { + :customer => 'nicole', + :group => 'Users', + :title => 'some subject 5 - 123äöü', + :body => 'some body 5 - 123äöü', }, - ] - browser_signle_test_with_login(tests, { :username => 'master@example.com' }) + :do_not_submit => true, + ) + + # select group + select( + :css => '.active [name="group_id"]', + :value => group_name1, + ) + + # check content + match( + :css => '.active [data-name="body"]', + :value => 'some body 5', + ) + + # check signature + match_not( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + + + # select create channel + click( + :css => '.active [data-type="email-out"]', + ) + + # group 1 is still selected + + # check content + match( + :css => '.active [data-name="body"]', + :value => 'some body 5', + ) + + # check signature + match( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + + + # select group + select( + :css => '.active [name="group_id"]', + :value => group_name2, + ) + + # check content + match( + :css => '.active [data-name="body"]', + :value => 'some body 5', + ) + + # check signature + match_not( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + + # select group + select( + :css => '.active [name="group_id"]', + :value => group_name3, + ) + + # check content + match( + :css => '.active [data-name="body"]', + :value => 'some body 5', + ) + + # check signature + match_not( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + + # select group + select( + :css => '.active [name="group_id"]', + :value => group_name1, + ) + + # check content + match( + :css => '.active [data-name="body"]', + :value => 'some body 5', + ) + + # check signature + match( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + + # select create channel + click( + :css => '.active [data-type="phone-out"]', + ) + + # check content + match( + :css => '.active [data-name="body"]', + :value => 'some body 5', + ) + + # check signature + match_not( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + + # + # check signature in zoom ticket + # + ticket_create( + :data => { + :customer => 'nicole', + :group => group_name1, + :title => 'some subject 5/2 - 123äöü', + :body => 'some body 5/2 - 123äöü', + }, + ) + + # execute reply + click( + :css => '.active [data-type="reply"]', + ) + + # check if signature exists + match( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + +=begin + # update group2 + select( + :css => '.active [name="group_id"]', + :value => group_name2, + ) + + # check if signature exists + match_not( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) +=end + + # discard changes + click( + :css => '.active .js-reset', + ) + sleep 3 + + # check if signature exists + match_not( + :css => '.active [data-name="body"]', + :value => signature_body1, + :no_quote => true, + ) + match_not( + :css => '.active [data-name="body"]', + :value => signature_body2, + :no_quote => true, + ) + end end \ No newline at end of file diff --git a/test/browser/agent_ticket_overview_level0_test.rb b/test/browser/agent_ticket_overview_level0_test.rb index f8f54f486..c1a77757e 100644 --- a/test/browser/agent_ticket_overview_level0_test.rb +++ b/test/browser/agent_ticket_overview_level0_test.rb @@ -18,22 +18,22 @@ class AgentTicketOverviewLevel0Test < TestCase :data => { :customer => 'nico*', :group => 'Users', - :title => 'overview count test #2', - :body => 'overview count test #2', + :title => 'overview count test #1', + :body => 'overview count test #1', } ) ticket2 = ticket_create( :data => { :customer => 'nico*', :group => 'Users', - :title => 'overview count test #3', - :body => 'overview count test #3', + :title => 'overview count test #2', + :body => 'overview count test #2', } ) sleep 6 # till overview is updated click( :css => '#navigation li.overviews a' ) click( :css => '.content.active .sidebar a[href="#ticket/view/all_unassigned"]' ) - sleep 2 # till overview is rendered + sleep 4 # till overview is rendered # select both via bulk action click( @@ -62,7 +62,7 @@ class AgentTicketOverviewLevel0Test < TestCase click( :css => '.active .bulkAction .js-submit', ) - sleep 8 + sleep 6 exists_not( :css => '.active table tr td input[value="' + ticket1[:id] + '"]', @@ -85,11 +85,23 @@ class AgentTicketOverviewLevel0Test < TestCase check( :css => '.modal input[value="number"]', ) + check( + :css => '.modal input[value="title"]', + ) + check( + :css => '.modal input[value="customer"]', + ) + check( + :css => '.modal input[value="group"]', + ) + check( + :css => '.modal input[value="created_at"]', + ) check( :css => '.modal input[value="article_count"]', ) click( :css => '.modal .js-submit' ) - sleep 2 + sleep 10 # check if number and article count is shown match( @@ -103,6 +115,7 @@ class AgentTicketOverviewLevel0Test < TestCase # reload browser reload() + sleep 4 # check if number and article count is shown match( @@ -144,8 +157,8 @@ class AgentTicketOverviewLevel0Test < TestCase :data => { :customer => 'nico*', :group => 'Users', - :title => 'overview count test #1', - :body => 'overview count test #1', + :title => 'overview count test #3', + :body => 'overview count test #3', } ) sleep 8 @@ -171,5 +184,8 @@ class AgentTicketOverviewLevel0Test < TestCase # get current overview count overview_counter_after = overview_counter() assert_equal( overview_counter_before['#ticket/view/all_unassigned'], overview_counter_after['#ticket/view/all_unassigned'] ) + + # cleanup + tasks_close_all() end end \ No newline at end of file diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index 49cd306f3..748d070d2 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -379,7 +379,7 @@ class TestCase < Test::Unit::TestCase =end - def match(params) + def match(params, fallback = false) instance = params[:browser] || @browser element = instance.find_elements( { :css => params[:css] } )[0] @@ -418,13 +418,8 @@ class TestCase < Test::Unit::TestCase 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 + if !fallback + return match(params, true) end end match = false @@ -554,16 +549,23 @@ class TestCase < Test::Unit::TestCase =end - def verify_task(params = {}) + def verify_task(params = {}, fallback = false) instance = params[:browser] || @browser data = params[:data] - if data[:title] - title = instance.find_elements( { :css => '.tasks .active' } )[0].text.strip - if title =~ /#{data[:title]}/i - assert( true, "matching '#{data[:title]}' in title '#{title}'" ) - else - raise "not matching '#{data[:title]}' in title '#{title}'" + begin + if data[:title] + title = instance.find_elements( { :css => '.tasks .active' } )[0].text.strip + if title =~ /#{data[:title]}/i + assert( true, "matching '#{data[:title]}' in title '#{title}'" ) + else + raise "not matching '#{data[:title]}' in title '#{title}'" + end + end + rescue + # just try again + if !fallback + verify_task(params, true) end end true @@ -906,23 +908,26 @@ wait untill text in selector disabppears #instance.execute_script( '$(".content.active .newTicket form").submit();' ) instance.find_elements( { :css => '.active .newTicket button.submit' } )[0].click sleep 1 - (1..16).each {|loop| + (1..8).each {|loop| if instance.current_url =~ /#{Regexp.quote('#ticket/zoom/')}/ assert( true, "ticket created" ) - sleep 0.5 + sleep 2.5 id = instance.current_url id.gsub!(//, ) id.gsub!(/^.+?\/(\d+)$/, "\\1") - number = instance.find_elements( { :css => '.active .page-header .ticket-number' } )[0].text - ticket = { - :id => id, - :number => number, - } - sleep 1 - return ticket + element = instance.find_elements( { :css => '.active .page-header .ticket-number' } )[0] + if element + number = element.text + ticket = { + :id => id, + :number => number, + } + sleep 1 + return ticket + end end - sleep 0.5 + sleep 1 } raise "ticket creation failed, can't get zoom url" end @@ -1394,6 +1399,115 @@ wait untill text in selector disabppears raise "text module creation failed" end +=begin + + signature_create( + :browser => browser2, + :data => { + :name => 'some sla' + random, + :body => 'some body', + }, + ) + +=end + + def signature_create(params = {}) + instance = params[:browser] || @browser + data = params[:data] + + instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click + instance.find_elements( { :css => 'a[href="#channels/email"]' } )[0].click + instance.find_elements( { :css => 'a[href="#c-signature"]' } )[0].click + sleep 8 + instance.find_elements( { :css => '#content #c-signature a[data-type="new"]' } )[0].click + sleep 2 + element = instance.find_elements( { :css => '.modal input[name=name]' } )[0] + element.clear + element.send_keys( data[:name] ) + element = instance.find_elements( { :css => '.modal textarea[name=body]' } )[0] + element.clear + element.send_keys( data[:body] ) + instance.find_elements( { :css => '.modal button.js-submit' } )[0].click + (1..12).each {|loop| + element = instance.find_elements( { :css => 'body' } )[0] + text = element.text + if text =~ /#{Regexp.quote(data[:name])}/ + assert( true, "signature created" ) + return true + end + sleep 1 + } + raise "signature creation failed" + end + +=begin + + group_create( + :browser => browser2, + :data => { + :name => 'some sla' + random, + :signature => 'some signature bame', + :member => [ + 'some_user_login', + ], + }, + ) + +=end + + def group_create(params = {}) + instance = params[:browser] || @browser + data = params[:data] + + instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click + instance.find_elements( { :css => 'a[href="#manage/groups"]' } )[0].click + sleep 2 + instance.find_elements( { :css => 'a[data-type="new"]' } )[0].click + sleep 2 + element = instance.find_elements( { :css => '.modal input[name=name]' } )[0] + element.clear + element.send_keys( data[:name] ) + element = instance.find_elements( { :css => '.modal select[name="email_address_id"]' } )[0] + dropdown = Selenium::WebDriver::Support::Select.new(element) + dropdown.select_by( :index, 1 ) + #dropdown.select_by( :text, action[:group]) + if data[:signature] + element = instance.find_elements( { :css => '.modal select[name="signature_id"]' } )[0] + dropdown = Selenium::WebDriver::Support::Select.new(element) + dropdown.select_by( :text, data[:signature]) + end + instance.find_elements( { :css => '.modal button.js-submit' } )[0].click + (1..12).each {|loop| + element = instance.find_elements( { :css => 'body' } )[0] + text = element.text + if text =~ /#{Regexp.quote(data[:name])}/ + assert( true, "group created" ) + + # add member + if data[:member] + data[:member].each {|login| + instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click + instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click + sleep 2 + element = instance.find_elements( { :css => '#content [name="search"]' } )[0] + element.clear + element.send_keys( login ) + sleep 2 + #instance.find_elements( { :css => '#content table [data-id]' } )[0].click + instance.execute_script( '$("#content table [data-id] td").first().click()' ) + sleep 2 + #instance.find_elements( { :css => 'label:contains(" ' + action[:name] + '")' } )[0].click + instance.execute_script( '$(\'label:contains(" ' + data[:name] + '")\').first().click()' ) + instance.find_elements( { :css => '.modal button.js-submit' } )[0].click + } + end + end + sleep 1 + return true + } + raise "group creation failed" + end + def quote(string) string_quoted = string string_quoted.gsub!(/&/, '&') @@ -1402,645 +1516,4 @@ wait untill text in selector disabppears string_quoted end - # Add more helper methods to be used by all tests here... - def browser_login(data) - all_tests = [ - { - :name => 'login', - :instance => data[:instance] || browser_instance, - :url => data[:url] || browser_url, - :action => [ - { - :execute => 'login', - :username => data[:username] || 'nicole.braun@zammad.org', - :password => data[:password] || 'test' - }, - ], - }, - ]; - return all_tests - end - - def browser_signle_test_with_login(tests, login = {}) - all_tests = browser_login( login ) - all_tests = all_tests.concat( tests ) - browser_single_test(all_tests) - end - - def browser_double_test(tests) - instance1 = browser_single_test( browser_login({ - :instance => tests[0][:instance1], - :username => tests[0][:instance1_username], - :password => tests[0][:instance1_password], - :url => tests[0][:url], - }), true ) - instance2 = browser_single_test( browser_login({ - :instance => tests[0][:instance2], - :username => tests[0][:instance2_username], - :password => tests[0][:instance2_password], - :url => tests[0][:url], - }), true ) - tests.each { |test| - if test[:action] - test[:action].each { |action| - - # wait - if action[:execute] == 'wait' - sleep action[:value] - next - end - - # ignore no browser defined action - next if !action[:where] - - # set current browser - if action[:where] == :instance1 - instance = instance1 - else - instance = instance2 - end - browser_element_action(test, action, instance) - } - end - } - browser_instance_close(instance1) - browser_instance_close(instance2) - end - - def browser_single_test(tests, keep_connection = false) - instance = nil - @stack = nil - tests.each { |test| - if test[:instance] - instance = test[:instance] - end - if test[:url] - instance.get( test[:url] ) - end - if test[:action] - test[:action].each { |action| - if action[:execute] == 'wait' - sleep action[:value] - next - end - browser_element_action(test, action, instance) - } - end - } - if keep_connection - return instance - end - browser_instance_close(instance) - end - - def browser_element_action(test, action, instance) - puts "NOTICE #{Time.now.to_s}: " + action.inspect - if action[:execute] !~ /accept|dismiss/i - #cookies = instance.manage.all_cookies - #cookies.each {|cookie| - # puts " COOKIE " + cookie.to_s - #} - end - - sleep 0.1 - if action[:css] - if action[:css].match '###stack###' - action[:css].gsub! '###stack###', @stack - end - begin - if action[:range] == 'all' - element = instance.find_elements( { :css => action[:css] } ) - else - element = instance.find_element( { :css => action[:css] } ) - end - rescue - element = nil - end - if action[:result] == false - assert( !element, "(#{test[:name]}) Element with css '#{action[:css]}' exists" ) - else - assert( element, "(#{test[:name]}) Element with css '#{action[:css]}' doesn't exist" ) - end - elsif action[:element] == :url - if instance.current_url =~ /#{Regexp.quote(action[:result])}/ - assert( true, "(#{test[:name]}) url #{instance.current_url} is matching #{action[:result]}" ) - else - assert( false, "(#{test[:name]}) url #{instance.current_url} is not matching #{action[:result]}" ) - end - elsif action[:element] == :title - title = instance.title - if title =~ /#{action[:value]}/i - assert( true, "(#{test[:name]}) matching '#{action[:value]}' in title '#{title}'" ) - else - assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in title '#{title}'" ) - end - return - elsif action[:element] == :alert - element = instance.switch_to.alert - elsif action[:execute] == 'login' - element = instance.find_elements( { :css => '#login input[name="username"]' } )[0] - if !element - assert( false, "(#{test[:name]}) no login box found!" ) - return - end - element.clear - element.send_keys( action[:username] ) - element = instance.find_elements( { :css => '#login input[name="password"]' } )[0] - element.clear - element.send_keys( action[:password] ) - if action[:remember_me] - instance.find_elements( { :css => '#login [name="remember_me"]' } )[0].click - end - instance.find_elements( { :css => '#login button' } )[0].click - sleep 4 - login = instance.find_elements( { :css => '.user-menu .user a' } )[0].attribute('title') - if login != action[:username] - assert( false, "(#{test[:name]}) login failed" ) - return - end - assert( true, "(#{test[:name]}) login success" ) - return - elsif action[:execute] == 'logout' - instance.find_elements( { :css => 'a[href="#current_user"]' } )[0].click - sleep 0.1 - instance.find_elements( { :css => 'a[href="#logout"]' } )[0].click - (1..6).each {|loop| - login = instance.find_elements( { :css => '#login' } )[0] - if login - assert( true, "(#{test[:name]}) logout" ) - return - end - } - assert( false, "(#{test[:name]}) no login box found!" ) - return - elsif action[:execute] == 'watch_for' - timeout = 16 - if action[:timeout] - timeout = action[:timeout] - end - loops = (timeout).to_i - text = '' - (1..loops).each { |loop| - element = instance.find_elements( { :css => action[:area] } )[0] - if element #&& element.displayed? - begin - text = element.text - if text =~ /#{action[:value]}/i - assert( true, "(#{test[:name]}) '#{action[:value]}' found in '#{text}'" ) - return - end - rescue - # just try again - end - end - sleep 1 - } - assert( false, "(#{test[:name]}) '#{action[:value]}' found in '#{text}'" ) - return - elsif action[:execute] == 'watch_for_disappear' - timeout = 16 - if action[:timeout] - timeout = action[:timeout] - end - loops = (timeout / 2).to_i - text = '' - (1..loops).each { |loop| - element = instance.find_elements( { :css => action[:area] } )[0] - if !element #|| element.displayed? - assert( true, "(#{test[:name]}) not found" ) - sleep 0.2 - return - end - sleep 2 - } - assert( false, "(#{test[:name]} / #{test[:area]}) still exsists" ) - return - - # create user - elsif action[:execute] == 'create_user' - instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click - instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click - sleep 2 - instance.find_elements( { :css => 'a[data-type="new"]' } )[0].click - sleep 2 - #element = instance.find_element( { :css => '.modal input[name=login]' } ) - #element.clear - #element.send_keys( action[:login] ) - element = instance.find_elements( { :css => '.modal input[name=firstname]' } )[0] - element.clear - element.send_keys( action[:firstname] ) - element = instance.find_elements( { :css => '.modal input[name=lastname]' } )[0] - element.clear - element.send_keys( action[:lastname] ) - element = instance.find_elements( { :css => '.modal input[name=email]' } )[0] - element.clear - element.send_keys( action[:email] ) - element = instance.find_elements( { :css => '.modal input[name=password]' } )[0] - element.clear - element.send_keys( action[:password] ) - element = instance.find_elements( { :css => '.modal input[name=password_confirm]' } )[0] - element.clear - element.send_keys( action[:password] ) - instance.find_elements( { :css => '.modal input[name="role_ids"][value="3"]' } )[0].click - instance.find_elements( { :css => '.modal button.js-submit' } )[0].click - (1..14).each {|loop| - element = instance.find_elements( { :css => 'body' } )[0] - text = element.text - if text =~ /#{Regexp.quote(action[:lastname])}/ - assert( true, "(#{test[:name]}) user created" ) - return - end - sleep 0.5 - } - assert( true, "(#{test[:name]}) user creation failed" ) - return - - # create signature - elsif action[:execute] == 'create_signature' - instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click - instance.find_elements( { :css => 'a[href="#channels/email"]' } )[0].click - instance.find_elements( { :css => 'a[href="#c-signature"]' } )[0].click - sleep 8 - instance.find_elements( { :css => '#content #c-signature a[data-type="new"]' } )[0].click - sleep 2 - element = instance.find_elements( { :css => '.modal input[name=name]' } )[0] - element.clear - element.send_keys( action[:name] ) - element = instance.find_elements( { :css => '.modal textarea[name=body]' } )[0] - element.clear - element.send_keys( action[:body] ) - instance.find_elements( { :css => '.modal button.js-submit' } )[0].click - (1..12).each {|loop| - element = instance.find_elements( { :css => 'body' } )[0] - text = element.text - if text =~ /#{Regexp.quote(action[:name])}/ - assert( true, "(#{test[:name]}) signature created" ) - return - end - sleep 1 - } - assert( true, "(#{test[:name]}) signature creation failed" ) - return - - # create group - elsif action[:execute] == 'create_group' - instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click - instance.find_elements( { :css => 'a[href="#manage/groups"]' } )[0].click - sleep 2 - instance.find_elements( { :css => 'a[data-type="new"]' } )[0].click - sleep 2 - element = instance.find_elements( { :css => '.modal input[name=name]' } )[0] - element.clear - element.send_keys( action[:name] ) - element = instance.find_elements( { :css => '.modal select[name="email_address_id"]' } )[0] - dropdown = Selenium::WebDriver::Support::Select.new(element) - dropdown.select_by( :index, 1 ) - #dropdown.select_by( :text, action[:group]) - if action[:signature] - element = instance.find_elements( { :css => '.modal select[name="signature_id"]' } )[0] - dropdown = Selenium::WebDriver::Support::Select.new(element) - dropdown.select_by( :text, action[:signature]) - end - instance.find_elements( { :css => '.modal button.js-submit' } )[0].click - (1..12).each {|loop| - element = instance.find_elements( { :css => 'body' } )[0] - text = element.text - if text =~ /#{Regexp.quote(action[:name])}/ - assert( true, "(#{test[:name]}) group created" ) - - # add member - if action[:member] - action[:member].each {|login| - instance.find_elements( { :css => 'a[href="#manage"]' } )[0].click - instance.find_elements( { :css => 'a[href="#manage/users"]' } )[0].click - sleep 2 - element = instance.find_elements( { :css => '#content [name="search"]' } )[0] - element.clear - element.send_keys( login ) - sleep 2 - #instance.find_elements( { :css => '#content table [data-id]' } )[0].click - instance.execute_script( '$("#content table [data-id] td").first().click()' ) - sleep 2 - #instance.find_elements( { :css => 'label:contains(" ' + action[:name] + '")' } )[0].click - instance.execute_script( '$(\'label:contains(" ' + action[:name] + '")\').first().click()' ) - instance.find_elements( { :css => '.modal button.js-submit' } )[0].click - } - end - return - end - sleep 1 - } - assert( true, "(#{test[:name]}) group creation failed" ) - return - - elsif action[:execute] == 'verify_task_attributes' - if action[:title] - text = instance.find_elements( { :css => '.tasks .active' } )[0].text.strip - assert_equal( action[:title], text ) - end - return - elsif action[:execute] == 'verify_ticket_attributes' - if action[:title] - text = instance.find_elements( { :css => '.content.active .page-header .ticket-title-update' } )[0].text.strip - assert_equal( action[:title], text ) - end - if action[:body] - text = instance.find_elements( { :css => '.content.active [data-name="body"]' } )[0].text.strip - assert_equal( action[:body], text ) - end - return - elsif action[:execute] == 'set_ticket_attributes' - if action[:title] - #element = instance.find_elements( { :css => '.content.active .page-header .ticket-title-update' } )[0] - #element.clear - #sleep 0.5 - #element = instance.find_elements( { :css => '.content.active .page-header .ticket-title-update' } )[0] - #element.send_keys( action[:title] ) - #sleep 0.5 - #element.send_keys( :tab ) - - instance.execute_script( '$(".content.active .page-header .ticket-title-update").focus()' ) - instance.execute_script( '$(".content.active .page-header .ticket-title-update").text("' + action[:title] + '")' ) - instance.execute_script( '$(".content.active .page-header .ticket-title-update").blur()' ) - instance.execute_script( '$(".content.active .page-header .ticket-title-update").trigger("blur")' ) -# { -# :where => :instance2, -# :execute => 'sendkey', -# :css => '.content.active .page-header .ticket-title-update', -# :value => 'TTT', -# }, -# { -# :where => :instance2, -# :execute => 'sendkey', -# :css => '.content.active .page-header .ticket-title-update', -# :value => :tab, -# }, - end - if action[:body] - #instance.execute_script( '$(".content.active div[data-name=body]").focus()' ) - sleep 0.5 - element = instance.find_elements( { :css => '.content.active div[data-name=body]' } )[0] - element.clear - element.send_keys( action[:body] ) - end - return - - # create ticket - elsif action[:execute] == 'create_ticket' - instance.find_elements( { :css => 'a[href="#new"]' } )[0].click - instance.find_elements( { :css => 'a[href="#ticket/create"]' } )[0].click - element = instance.find_elements( { :css => '.active .newTicket' } )[0] - if !element - assert( false, "(#{test[:name]}) no ticket create screen found!" ) - return - end - sleep 2 - - # check count of agents, should be only 1 / - selection on init screen - count = instance.find_elements( { :css => '.active .newTicket select[name="owner_id"] option' } ).count - assert_equal( 1, count, 'check if owner selection is empty per default' ) - - if action[:group] - element = instance.find_elements( { :css => '.active .newTicket select[name="group_id"]' } )[0] - dropdown = Selenium::WebDriver::Support::Select.new(element) - dropdown.select_by( :text, action[:group]) - sleep 0.2 - end - if action[:subject] - element = instance.find_elements( { :css => '.active .newTicket input[name="title"]' } )[0] - element.clear - element.send_keys( action[:subject] ) - sleep 0.2 - end - if action[:body] - #instance.execute_script( '$(".active .newTicket div[data-name=body]").focus()' ) - sleep 0.5 - element = instance.find_elements( { :css => '.active .newTicket div[data-name=body]' } )[0] - element.clear - element.send_keys( action[:body] ) - end - if action[:customer] == nil - element = instance.find_elements( { :css => '.active .newTicket input[name="customer_id_completion"]' } )[0] - element.click - element.clear - element.send_keys( 'nico*' ) - sleep 4 - element.send_keys( :arrow_down ) - sleep 0.1 - instance.find_elements( { :css => '.active .newTicket .recipientList-entry.js-user.is-active' } )[0].click - sleep 0.3 - end - if action[:do_not_submit] - assert( true, "(#{test[:name]}) ticket created without submit" ) - return - end - sleep 0.8 - #instance.execute_script( '$(".content.active .newTicket form").submit();' ) - instance.find_elements( { :css => '.active .newTicket button.submit' } )[0].click - sleep 1 - (1..16).each {|loop| - if instance.current_url =~ /#{Regexp.quote('#ticket/zoom/')}/ - assert( true, "(#{test[:name]}) ticket created" ) - sleep 1 - return - end - sleep 0.5 - } - assert( false, "(#{test[:name]}) ticket creation failed, can't get zoom url" ) - return - - # search ticket - elsif action[:execute] == 'search_ticket' - element = instance.find_elements( { :css => '#global-search' } )[0] - element.click - element.clear - action[:number].gsub! '###stack###', @stack - element.send_keys( action[:number] ) - sleep 3 - instance.find_elements( { :css => '.search .empty-search' } )[0].click - sleep 0.5 - text = instance.find_elements( { :css => '#global-search' } )[0].attribute('value') - if !text - assert( false, "(#{test[:name]}) #global-search is not empty!" ) - return - end - element = instance.find_elements( { :css => '#global-search' } )[0] - element.click - element.clear - action[:number].gsub! '###stack###', @stack - element.send_keys( action[:number] ) - sleep 2 - element = instance.find_element( { :partial_link_text => action[:number] } ).click - number = instance.find_elements( { :css => '.active .page-header .ticket-number' } )[0].text - if number !~ /#{action[:number]}/ - assert( false, "(#{test[:name]}) unable to search/find ticket #{action[:number]}!" ) - return - end - assert( true, "(#{test[:name]}) ticket #{action[:number]} found" ) - return - - # close all tasks - elsif action[:execute] == 'close_all_tasks' - for i in 1..100 - sleep 1 - if instance.find_elements( { :css => '.navigation .tasks .task:first-child' } )[0] - instance.mouse.move_to( instance.find_elements( { :css => '.navigation .tasks .task:first-child' } )[0] ) - sleep 0.2 - - click_element = instance.find_elements( { :css => '.navigation .tasks .task:first-child .js-close' } )[0] - if click_element - sleep 0.1 - click_element.click - - # accept task close warning - if action[:discard_changes] - sleep 1 - instance.find_elements( { :css => '.modal button.js-submit' } )[0].click - end - end - else - break - end - end - assert( true, "(#{test[:name]}) all tasks closed" ) - return - elsif action[:execute] == 'navigate' - instance.navigate.to( action[:to] ) - return - elsif action[:execute] == 'reload' - instance.navigate.refresh - return - elsif action[:execute] == 'js' - result = instance.execute_script( action[:value] ) - elsif action[:execute] == 'sendkey' - if action[:value].class == Array - action[:value].each {|key| - instance.action.send_keys(key).perform - } - else - instance.action.send_keys(action[:value]).perform - #instance.action.send_keys(:enter).perform - end -# element.send_keys( action[:value] ) - elsif action[:link] - if action[:link].match '###stack###' - action[:link].gsub! '###stack###', @stack - end - element = instance.find_element( { :partial_link_text => action[:link] } ) - else - assert( false, "(#{test[:name]}) unknow selector for '#{action[:element]}'" ) - end - if action[:execute] == 'setCheck' - checked = element.attribute('checked') - if !checked - element.click - end - elsif action[:execute] == 'setUncheck' - checked = element.attribute('checked') - if checked - element.click - end - elsif action[:execute] == 'set' - element.clear - if action[:value] == '###stack###' - element.send_keys( @stack ) - else - if !action[:slow] - element.send_keys( action[:value] ) - else - element.send_keys( '' ) - keys = action[:value].to_s.split('') - keys.each {|key| - instance.action.send_keys(key).perform - } - end - sleep 0.3 - end - elsif action[:execute] == 'select' - dropdown = Selenium::WebDriver::Support::Select.new(element) - dropdown.select_by(:text, action[:value]) - elsif action[:execute] == 'click' - if element.class == Array - element.each {|item| - item.click - } - else - element.click - end - elsif action[:execute] == 'accept' - element.accept - elsif action[:execute] == 'dismiss' - element.dismiss - elsif action[:execute] == 'send_key' - element.send_keys action[:value] - elsif action[:execute] == 'match' - if action[:css] =~ /select/ - dropdown = Selenium::WebDriver::Support::Select.new(element) - success = false - if dropdown.selected_options - dropdown.selected_options.each {|option| - if option.text == action[:value] - success = true - end - } - end - if action[:match_result] - if success - assert( true, "(#{test[:name]}) matching '#{action[:value]}' in select list" ) - else - assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in select list" ) - end - else - if success - assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in select list" ) - else - assert( true, "(#{test[:name]}) matching '#{action[:value]}' in select list" ) - end - end - else - if action[:attribute] - text = element.attribute( action[:attribute] ) - elsif action[:css] =~ /(input|textarea)/i - text = element.attribute('value') - else - text = element.text - end - if action[:value] == '###stack###' - action[:value] = @stack - end - match = false - if action[:no_quote] - #puts "aaaa #{text}/#{action[:value]}" - if text =~ /#{action[:value]}/i - if $1 - @stack = $1 - end - match = $1 || true - end - else - if text =~ /#{Regexp.quote(action[:value])}/i - match = true - end - end - if match - if action[:match_result] - assert( true, "(#{test[:name]}) matching '#{action[:value]}' in content '#{text}'" ) - else - assert( false, "(#{test[:name]}) matching '#{action[:value]}' in content '#{text}' but should not!" ) - end - else - if !action[:match_result] - assert( true, "(#{test[:name]}) not matching '#{action[:value]}' in content '#{text}'" ) - else - assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in content '#{text}' but should not!" ) - end - end - end - elsif action[:execute] == 'check' - elsif action[:execute] == 'js' - elsif action[:execute] == 'sendkey' - else - assert( false, "(#{test[:name]}) unknow action '#{action[:execute]}'" ) - end - end -end +end \ No newline at end of file