qa_robusta 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. data/.autotest +23 -0
  2. data/.gemtest +0 -0
  3. data/History.txt +6 -0
  4. data/Manifest.txt +101 -0
  5. data/README.txt +48 -0
  6. data/Rakefile +18 -0
  7. data/bin/qa_robusta +14 -0
  8. data/common/Rakefile +95 -0
  9. data/common/conf/monkey_patch.yaml +8 -0
  10. data/common/conf/monkey_patch.yaml.ex +10 -0
  11. data/common/lib/array.rb +9 -0
  12. data/common/lib/cache.rb +12 -0
  13. data/common/lib/constants.rb +35 -0
  14. data/common/lib/error_defns.rb +13 -0
  15. data/common/lib/format_html_tmp.html +34 -0
  16. data/common/lib/formatters.rb +18 -0
  17. data/common/lib/gem_helpers.rb +29 -0
  18. data/common/lib/gems/.svn/entries +43 -0
  19. data/common/lib/gems/cache/.svn/entries +28 -0
  20. data/common/lib/gems/doc/.svn/entries +28 -0
  21. data/common/lib/gems/gems/.svn/entries +28 -0
  22. data/common/lib/gems/installed/.svn/entries +40 -0
  23. data/common/lib/gems/installed/cache/.svn/entries +28 -0
  24. data/common/lib/gems/installed/doc/.svn/entries +28 -0
  25. data/common/lib/gems/installed/gems/.svn/entries +28 -0
  26. data/common/lib/gems/installed/specifications/.svn/entries +28 -0
  27. data/common/lib/gems/specifications/.svn/entries +28 -0
  28. data/common/lib/gen_suite_doc.rb +52 -0
  29. data/common/lib/load_test_data.rb +18 -0
  30. data/common/lib/monkey_patch.rb +149 -0
  31. data/common/lib/navigate_mech.rb +79 -0
  32. data/common/lib/update_element.rb +12 -0
  33. data/common/monkey_patches/mechanize.rb +589 -0
  34. data/common/monkey_patches/table.rb +363 -0
  35. data/common/monkey_patches/telnet.rb +420 -0
  36. data/common/monkey_patches/unit.rb +538 -0
  37. data/demo/demo_site.rb +38 -0
  38. data/demo/public/javascripts/jquery-1.6.2.min.js +18 -0
  39. data/demo/views/index.erb +35 -0
  40. data/lib/monkey_patch.rb +26 -0
  41. data/lib/qa_robusta.rb +3 -0
  42. data/mechanize_interface/conf/app.yaml +10 -0
  43. data/mechanize_interface/lib/agent.rb +18 -0
  44. data/mechanize_interface/lib/app_require.rb +19 -0
  45. data/mechanize_interface/lib/get_page.rb +20 -0
  46. data/mechanize_interface/lib/login.rb +30 -0
  47. data/mechanize_interface/lib/navigation_paths.rb +12 -0
  48. data/mechanize_interface/test/lib/mech_unit_test.rb +19 -0
  49. data/qa_observer/conf/dev_users.yaml +9 -0
  50. data/qa_observer/conf/development.yaml +3 -0
  51. data/qa_observer/conf/qa_observer_links.yaml +10 -0
  52. data/qa_observer/generators/site/site_generator.rb +61 -0
  53. data/qa_observer/generators/site/templates/base_urls.yaml.erb +6 -0
  54. data/qa_observer/generators/site/templates/create_flow.rb.erb +54 -0
  55. data/qa_observer/generators/site/templates/elements.rb.erb +61 -0
  56. data/qa_observer/generators/site/templates/html_elements.yaml +22 -0
  57. data/qa_observer/generators/site/templates/navigate.rb +32 -0
  58. data/qa_observer/generators/site/templates/reports.rb +7 -0
  59. data/qa_observer/generators/site/templates/users_list.yaml +21 -0
  60. data/qa_observer/generators/test_case/templates/test_case.rb.erb +62 -0
  61. data/qa_observer/generators/test_case/test_case_generator.rb +29 -0
  62. data/qa_observer/lib/doc.rb +103 -0
  63. data/qa_observer/lib/env_details.rb +2 -0
  64. data/qa_observer/lib/error_defns.rb +3 -0
  65. data/qa_observer/lib/form_helpers.rb +52 -0
  66. data/qa_observer/lib/reports.rb +7 -0
  67. data/qa_observer/lib/requires.rb +23 -0
  68. data/qa_observer/lib/system_test.rb +146 -0
  69. data/qa_observer/lib/test_extention.rb +29 -0
  70. data/qa_observer/lib/update_element.rb +12 -0
  71. data/qa_observer/lib/watir.rb +42 -0
  72. data/qa_observer/script/destroy +14 -0
  73. data/qa_observer/script/generate +14 -0
  74. data/qa_observer/sites/demo/conf/base_urls.yaml +6 -0
  75. data/qa_observer/sites/demo/conf/html_elements.yaml +22 -0
  76. data/qa_observer/sites/demo/conf/remote_machine.yaml +12 -0
  77. data/qa_observer/sites/demo/conf/users_list.yaml +21 -0
  78. data/qa_observer/sites/demo/elements/demo_elements.rb +9 -0
  79. data/qa_observer/sites/demo/flows/demo_flows.rb +37 -0
  80. data/qa_observer/sites/demo/helpers/.placeholder +0 -0
  81. data/qa_observer/sites/demo/lib/navigate.rb +32 -0
  82. data/qa_observer/sites/demo/lib/reports.rb +7 -0
  83. data/qa_observer/sites/demo/results/.placeholder +0 -0
  84. data/qa_observer/sites/demo/results/images/.placeholder +0 -0
  85. data/qa_observer/sites/demo/test_cases/home_page.rb +106 -0
  86. data/qa_observer/suites/demo_lg_chrome/lg.yaml +11 -0
  87. data/qa_observer/suites/demo_md_chrome/md.yaml +11 -0
  88. data/qa_observer/suites/demo_sm_chrome/sm.yaml +11 -0
  89. data/qa_observer/suites/init.rb +41 -0
  90. data/qa_observer/test_runner.rb +125 -0
  91. data/remote_unix/helpers/constants.rb +8 -0
  92. data/remote_unix/helpers/out_xforms.rb +48 -0
  93. data/remote_unix/lib/common.rb +52 -0
  94. data/remote_unix/lib/error_defn.rb +4 -0
  95. data/remote_unix/lib/general_unix.rb +308 -0
  96. data/remote_unix/lib/network_commands.rb +41 -0
  97. data/remote_unix/lib/network_info.rb +98 -0
  98. data/remote_unix/lib/postfix_commands.rb +87 -0
  99. data/remote_unix/lib/postfix_info.rb +30 -0
  100. data/remote_unix/lib/requires.rb +25 -0
  101. data/remote_unix/lib/scp.rb +22 -0
  102. data/remote_unix/lib/ssh.rb +46 -0
  103. data/test/test_qa_robusta.rb +8 -0
  104. metadata +219 -0
@@ -0,0 +1,41 @@
1
+ module RemoteUnix
2
+ # common utilities which test cases can utilize
3
+ class NetworkCommands
4
+ include Common
5
+ attr_accessor :network_info
6
+ def initialize(params={})
7
+ @ssh = SSH.new(params[:host], params[:user], params[:password])
8
+ @network_info = RemoteUnix::NetworkInfo.new(@ssh) unless @network_info
9
+ set_platform
10
+ end
11
+
12
+ # params={ :static => 'some ip',
13
+ # :dynamic => 'any value' --> just checks if key is present
14
+ # :netmask => 'some netmask'
15
+ # :gateway => 'some gateway'
16
+ # :device => proper interface..eth0, eth1, etc..
17
+ def deb_update_interface(params={})
18
+
19
+ unless @platform[:distro] == 'DEB'
20
+ raise ArgumentError, "calling deb specific function on non debian distro"
21
+ end
22
+
23
+ if !@platform[:sudo]
24
+ nav_path = [
25
+ {:execute => "",
26
+ :expected_output => /#{@expected_prompt}/i, :timeout => 1}
27
+
28
+ ]
29
+ else
30
+ # TODO: nav_path different for sudo interaction
31
+ end
32
+
33
+ begin
34
+ puts @ssh.navigate(nav_path).inspect
35
+ rescue => e
36
+ puts "IGNORE: #{e}"
37
+ end
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,98 @@
1
+ module RemoteUnix
2
+ # common utilities which test cases can utilize
3
+ class NetworkInfo
4
+ include Common
5
+ attr_reader :interfaces, :dns
6
+ def initialize(ssh_session)
7
+ @ssh = ssh_session
8
+ @interfaces = {}
9
+ @dns = {}
10
+ end
11
+
12
+ def get_interface_devices
13
+ nav_path = [
14
+ {:execute => "ifconfig -a",
15
+ :timeout => 1},
16
+ ]
17
+
18
+ begin
19
+ devices = []
20
+ out = GenericShellOutput.to_lines(@ssh.navigate(nav_path), nav_path.first[:execute])
21
+ out.grep(/eth/).each { |i| devices << i.split(' ').first }
22
+ end
23
+ devices
24
+ end
25
+
26
+ def get_gw_for_interface
27
+
28
+ end
29
+
30
+ def get_dns_info
31
+ nav_path = [
32
+ {:execute => "cat /etc/resolv.conf",
33
+ :timeout => 1},
34
+ ]
35
+
36
+ begin
37
+
38
+ out = GenericShellOutput.to_lines(@ssh.navigate(nav_path), nav_path.first[:execute])
39
+ dns_servers = []
40
+
41
+ out.grep(/nameserver/).each { |i| dns_servers << i.split(' ').last }
42
+
43
+ if out.grep(/dhclient/).nitems > 0
44
+ dhcp_enabled = true
45
+ else
46
+ dhcp_enabled = false
47
+ end
48
+
49
+ search_domain = out.grep(/search/).to_s.split(' ').last
50
+
51
+ @dns = {:dns_servers => dns_servers, :search_domain => search_domain,
52
+ :dhcp_enabled => dhcp_enabled}
53
+ end
54
+
55
+ @dns
56
+
57
+ end
58
+
59
+ def get_interface_info(dev)
60
+ nav_path = [
61
+ {:execute => "ifconfig #{dev}",
62
+ :timeout => 1},
63
+ ]
64
+
65
+ begin
66
+ out = GenericShellOutput.to_lines(@ssh.navigate(nav_path), nav_path.first[:execute]).to_s
67
+ begin
68
+ ip = out.scan(/.* inet addr:(.*) .*/m).first.first.split(' ').first.strip
69
+ rescue NoMethodError => e
70
+ ip=''
71
+ end
72
+ begin
73
+ mask = out.scan(/.* Mask:(.*) .*/m).first.first.split(' ').first.strip
74
+ rescue NoMethodError => e
75
+ mask = ''
76
+ end
77
+ mac = out.scan(/.* HWaddr (.*) .*/m).first.first.split(' ').first.strip
78
+ misc_info = get_dns_info
79
+
80
+ return {dev => {:ip => ip, :mask => mask, :mac => mac,
81
+ :dns_servers => misc_info[:dns_servers],
82
+ :search_domain => misc_info[:search_domain],
83
+ :dhcp_enabled => misc_info[:dhcp_enabled]
84
+ }
85
+ }
86
+
87
+ end
88
+ end
89
+
90
+ def get_interfaces_info
91
+ get_interface_devices.each {|dev|
92
+ @interfaces.merge(get_interface_info(dev))
93
+ }
94
+ @interfaces
95
+ end
96
+
97
+ end
98
+ end
@@ -0,0 +1,87 @@
1
+ module RemoteUnix
2
+ # common utilities which test cases can utilize
3
+ class PostfixCommands
4
+ include Common
5
+ attr_accessor :postfix_info
6
+ def initialize(params={})
7
+ @main_cfg = nil
8
+ @ssh = SSH.new(params[:host], params[:user], params[:password])
9
+
10
+ @greylisting_cfg=<<-EOF
11
+ smtpd_recipient_restrictions =
12
+ reject_unauth_destination
13
+ check_policy_service inet:127.0.0.1:10023
14
+ EOF
15
+
16
+ @postfix_info = RemoteUnix::PostfixInfo.new(@ssh) unless @postfix_info
17
+ set_platform
18
+ end
19
+
20
+ # install postfix and postgrey
21
+ def install
22
+ nav_path = [
23
+ {:execute => "apt-get remove -y exim4-daemon-light exim4 exim4-base exim4-config",
24
+ :expected_output => /#{@expected_prompt}/i, :timeout => 0},
25
+
26
+
27
+ {:execute => "rm -f /var/cache/apt/archives/*.deb",
28
+ :expected_output => /#{@expected_prompt}/i, :timeout => 0},
29
+
30
+
31
+ {:execute => "apt-get -y install -d postfix postgrey",
32
+ :expected_output => /#{@expected_prompt}/i, :timeout => 0},
33
+
34
+ {:execute => "dpkg -i /var/cache/apt/archives/*.deb",
35
+ :expected_output => /#{@expected_prompt}/i, :timeout => 0},
36
+
37
+
38
+ ]
39
+ out=@ssh.navigate(nav_path)
40
+
41
+ end
42
+
43
+ def get_main_cfg
44
+ nav_path = [
45
+ {:execute => "cat /etc/postfix/main.cfg",
46
+ :expected_output => /#{@expected_prompt}/i, :timeout => 0},
47
+
48
+ ]
49
+ @main_cfg = RemoteUnix::GenericShellOutput.to_lines(@ssh.navigate(nav_path), nav_path.first[:execute]).to_s
50
+
51
+ end
52
+
53
+ def put_main_cfg
54
+ nav_path = [
55
+ {:execute => "echo #{@main_cfg} > /etc/postfix/main.cfg",
56
+ :expected_output => /#{@expected_prompt}/i, :timeout => 0},
57
+
58
+ ]
59
+ out = RemoteUnix::GenericShellOutput.to_lines(@ssh.navigate(nav_path), nav_path.first[:execute])
60
+
61
+ end
62
+
63
+ # grab postfix config and add greylisting support
64
+ def enable_greylisting
65
+ get_main_cfg
66
+
67
+ unless @main_cfg !~ /#{@greylisting_cfg}/m
68
+ @main_cfg += @greylisting_cfg
69
+ end
70
+
71
+ put_main_cfg
72
+ end
73
+
74
+ # grab postfix config and remove greylisting support
75
+ def disable_greylisting
76
+ get_main_cfg
77
+
78
+ unless @main_cfg =~ /#{@greylisting_cfg}/m
79
+ @main_cfg.gsub!(/#{@greylisting_cfg}/m)
80
+ end
81
+
82
+ put_main_cfg
83
+
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,30 @@
1
+ module RemoteUnix
2
+ # common utilities which test cases can utilize
3
+ class PostfixInfo
4
+ include Common
5
+ def initialize(ssh_session)
6
+ @ssh = ssh_session
7
+ set_platform
8
+ end
9
+
10
+ def installed?
11
+ nav_path = [
12
+ {:execute => "dpkg --get-selections | grep postfix | grep -cv deinstall",
13
+ :timeout => 12},
14
+ ]
15
+
16
+ begin
17
+ out = RemoteUnix::GenericShellOutput.to_lines(@ssh.navigate(nav_path), nav_path.first[:execute]).to_s
18
+ if out == '0'
19
+ return false
20
+ else
21
+ return true
22
+ end
23
+ # TODO: need to handle Net::SSH connection ex
24
+ rescue => e
25
+ puts "IGNORE: #{e}"
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,25 @@
1
+ base_dir = File.expand_path(File.dirname(__FILE__))
2
+ require 'fileutils'
3
+ require "#{base_dir}/../../common/lib/gem_helpers"
4
+ require 'time'
5
+ require 'find'
6
+ GemHelpers.update_gem_path "#{base_dir}/../../common/gems/installed"
7
+
8
+ require "#{base_dir}/common"
9
+ require "net/scp"
10
+ require "#{base_dir}/scp"
11
+ require "#{base_dir}/ssh"
12
+ require 'net/ssh/telnet'
13
+ #require 'ruby-debug'
14
+
15
+ require_dirs = [base_dir, "#{base_dir}/../helpers"]
16
+
17
+ require_dirs.each { |dir|
18
+ Find.find(dir) { |entry|
19
+ next if File.directory?(entry) || entry == "requires.rb" || entry !~ /\.rb$/
20
+ require entry
21
+ }
22
+ }
23
+
24
+
25
+
@@ -0,0 +1,22 @@
1
+ module SCP
2
+ class Upload
3
+ def initialize(host, user, password, local_file, remote_file)
4
+ begin
5
+ Net::SCP.start(host, user, :password => password) { |scp| scp.upload! local_file, remote_file }
6
+ rescue => e
7
+ retry
8
+ end
9
+ end
10
+ end
11
+ class Download
12
+ def initialize(host, user, password, remote_file, local_file)
13
+ begin
14
+ Net::SCP.start(host, user, :password => password) { |scp| scp.download! remote_file, local_file }
15
+ rescue => e
16
+ retry
17
+ end
18
+
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,46 @@
1
+ class SSH
2
+ def initialize(host, user, password)
3
+ @ssh = Net::SSH.start(host, user, {:password => password})
4
+ @ssh.send_global_request("[EMAIL PROTECTED]")
5
+ @ssh_telnet = Net::SSH::Telnet.new("Session" => @ssh)
6
+ end
7
+ def navigate(nav_path=[])
8
+
9
+ unless nav_path.kind_of?(Array)
10
+ raise ArgumentError, "argument must be an array"
11
+ end
12
+
13
+ data = []
14
+ nav_path.each { |cmd|
15
+ retry_ct = 0
16
+ @ssh.send_global_request("[EMAIL PROTECTED]")
17
+ puts "executing cmd: #{cmd.inspect}"
18
+ raise ArgumentError unless cmd.has_key?(:execute)
19
+ begin
20
+ if cmd.has_key?(:expected_output) && cmd.has_key?(:timeout)
21
+ out = @ssh_telnet.cmd("String" => cmd[:execute],
22
+ "Match" => cmd[:expected_output],
23
+ "Waittime" => cmd[:timeout])
24
+ elsif cmd.has_key?(:expected_output)
25
+ out = @ssh_telnet.cmd("String" => cmd[:execute], "Match" => cmd[:expected_output])
26
+ else
27
+ if cmd.has_key?(:timeout)
28
+ out = @ssh_telnet.cmd("String" => cmd[:execute], "Waittime" => cmd[:timeout])
29
+ else
30
+ out = @ssh_telnet.cmd("String" => cmd[:execute])
31
+ end
32
+ end
33
+ rescue Timeout::Error => e
34
+ retry_ct += 1
35
+ out = ''
36
+ retry if retry_ct < 4
37
+ puts "Timout::Error occured: retrying"
38
+ retry
39
+ end
40
+ puts out
41
+ data << out
42
+ }
43
+
44
+ data
45
+ end
46
+ end
@@ -0,0 +1,8 @@
1
+ require "test/unit"
2
+ require "qa_robusta"
3
+
4
+ class TestQaRobusta < Test::Unit::TestCase
5
+ def test_sanity
6
+ flunk "write tests or I will kneecap you"
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,219 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qa_robusta
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.3
6
+ platform: ruby
7
+ authors:
8
+ - Cliff Cyphers
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-10-03 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: platform_helpers
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.1.2
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rubigen
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: hoe
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: "2.12"
46
+ type: :development
47
+ version_requirements: *id003
48
+ description: |-
49
+ QA Robusta is an automation framework easing pain points away from automation test case writers. How is pain relieved?
50
+
51
+ * Elements, such as links, buttons, and other html objects are defined in one
52
+ location. This ensures over time the user won't have definitions spread out
53
+ throughout different layers of code requiring time consuming updates if the
54
+ application under test is modified.
55
+ * Well defined flows allows the user to have a common means for navigating and
56
+ controlling interactions with the application under test. This takes all logic
57
+ out of test classes and yields in higher more modular code re-use.
58
+ * When an application requiring testing has the elements and flows implemented
59
+ less code savy resources can easily add new test cases once trained on how to
60
+ access the flows and elements.
61
+ * When ever a link or button is clicked a screen shot is taken
62
+ * Results are available under site/results directory in html format. Report
63
+ includes the rdoc on a per test class method along with any screen shots taken.
64
+ Example report: https://cyberconnect.biz/opensource/demo_results.html
65
+ * Transparent remote Unix command execution leading to well defined interfaces
66
+ for common task. For example, one may have a class defined specifically for
67
+ RemoteUnixNetwork. This class would have methods such as, assign_ip, ifup, ifdown,
68
+ etc. This class then would be able to perform these task on any remote Unix machine.
69
+ * Executes the same on Windows or Linux/Unix environments. Developers have the
70
+ freedom to develop on the platform of choice.
71
+ * Mechanize extension: Allows the user to define a web application's page elements in
72
+ a YAML format and provide navigation paths accessing the YAML structure to interact
73
+ with the web application. Users can also perform direct http.post or any other
74
+ mechanize functionality when defining state-full interfaces to hit a web application
75
+ without going through a browser.
76
+ email:
77
+ - cliff.cyphers@gmail.com
78
+ executables:
79
+ - qa_robusta
80
+ extensions: []
81
+
82
+ extra_rdoc_files:
83
+ - History.txt
84
+ - Manifest.txt
85
+ - README.txt
86
+ files:
87
+ - .autotest
88
+ - History.txt
89
+ - Manifest.txt
90
+ - README.txt
91
+ - Rakefile
92
+ - bin/qa_robusta
93
+ - lib/qa_robusta.rb
94
+ - remote_unix/helpers/constants.rb
95
+ - remote_unix/helpers/out_xforms.rb
96
+ - remote_unix/lib/scp.rb
97
+ - remote_unix/lib/error_defn.rb
98
+ - remote_unix/lib/network_info.rb
99
+ - remote_unix/lib/general_unix.rb
100
+ - remote_unix/lib/network_commands.rb
101
+ - remote_unix/lib/postfix_commands.rb
102
+ - remote_unix/lib/common.rb
103
+ - remote_unix/lib/ssh.rb
104
+ - remote_unix/lib/postfix_info.rb
105
+ - remote_unix/lib/requires.rb
106
+ - demo/public/javascripts/jquery-1.6.2.min.js
107
+ - demo/demo_site.rb
108
+ - demo/views/index.erb
109
+ - mechanize_interface/conf/app.yaml
110
+ - mechanize_interface/lib/get_page.rb
111
+ - mechanize_interface/lib/login.rb
112
+ - mechanize_interface/lib/navigation_paths.rb
113
+ - mechanize_interface/lib/agent.rb
114
+ - mechanize_interface/lib/app_require.rb
115
+ - mechanize_interface/test/lib/mech_unit_test.rb
116
+ - qa_observer/script/generate
117
+ - qa_observer/script/destroy
118
+ - qa_observer/sites/demo/test_cases/home_page.rb
119
+ - qa_observer/sites/demo/elements/demo_elements.rb
120
+ - qa_observer/sites/demo/conf/base_urls.yaml
121
+ - qa_observer/sites/demo/conf/users_list.yaml
122
+ - qa_observer/sites/demo/conf/html_elements.yaml
123
+ - qa_observer/sites/demo/conf/remote_machine.yaml
124
+ - qa_observer/sites/demo/flows/demo_flows.rb
125
+ - qa_observer/sites/demo/lib/reports.rb
126
+ - qa_observer/sites/demo/lib/navigate.rb
127
+ - qa_observer/sites/demo/helpers/.placeholder
128
+ - qa_observer/sites/demo/results/.placeholder
129
+ - qa_observer/sites/demo/results/images/.placeholder
130
+ - qa_observer/conf/dev_users.yaml
131
+ - qa_observer/conf/development.yaml
132
+ - qa_observer/conf/qa_observer_links.yaml
133
+ - qa_observer/suites/init.rb
134
+ - qa_observer/suites/demo_sm_chrome/sm.yaml
135
+ - qa_observer/suites/demo_lg_chrome/lg.yaml
136
+ - qa_observer/suites/demo_md_chrome/md.yaml
137
+ - qa_observer/test_runner.rb
138
+ - qa_observer/generators/test_case/templates/test_case.rb.erb
139
+ - qa_observer/generators/test_case/test_case_generator.rb
140
+ - qa_observer/generators/site/templates/base_urls.yaml.erb
141
+ - qa_observer/generators/site/templates/reports.rb
142
+ - qa_observer/generators/site/templates/create_flow.rb.erb
143
+ - qa_observer/generators/site/templates/navigate.rb
144
+ - qa_observer/generators/site/templates/elements.rb.erb
145
+ - qa_observer/generators/site/templates/users_list.yaml
146
+ - qa_observer/generators/site/templates/html_elements.yaml
147
+ - qa_observer/generators/site/site_generator.rb
148
+ - qa_observer/lib/form_helpers.rb
149
+ - qa_observer/lib/error_defns.rb
150
+ - qa_observer/lib/env_details.rb
151
+ - qa_observer/lib/reports.rb
152
+ - qa_observer/lib/doc.rb
153
+ - qa_observer/lib/update_element.rb
154
+ - qa_observer/lib/watir.rb
155
+ - qa_observer/lib/test_extention.rb
156
+ - qa_observer/lib/system_test.rb
157
+ - qa_observer/lib/requires.rb
158
+ - common/monkey_patches/table.rb
159
+ - common/monkey_patches/unit.rb
160
+ - common/monkey_patches/telnet.rb
161
+ - common/monkey_patches/mechanize.rb
162
+ - common/conf/monkey_patch.yaml
163
+ - common/conf/monkey_patch.yaml.ex
164
+ - common/Rakefile
165
+ - common/lib/formatters.rb
166
+ - common/lib/error_defns.rb
167
+ - common/lib/navigate_mech.rb
168
+ - common/lib/gems/gems/.svn/entries
169
+ - common/lib/gems/doc/.svn/entries
170
+ - common/lib/gems/cache/.svn/entries
171
+ - common/lib/gems/installed/gems/.svn/entries
172
+ - common/lib/gems/installed/doc/.svn/entries
173
+ - common/lib/gems/installed/cache/.svn/entries
174
+ - common/lib/gems/installed/specifications/.svn/entries
175
+ - common/lib/gems/installed/.svn/entries
176
+ - common/lib/gems/specifications/.svn/entries
177
+ - common/lib/gems/.svn/entries
178
+ - common/lib/load_test_data.rb
179
+ - common/lib/monkey_patch.rb
180
+ - common/lib/format_html_tmp.html
181
+ - common/lib/update_element.rb
182
+ - common/lib/cache.rb
183
+ - common/lib/array.rb
184
+ - common/lib/gem_helpers.rb
185
+ - common/lib/gen_suite_doc.rb
186
+ - common/lib/constants.rb
187
+ - lib/monkey_patch.rb
188
+ - test/test_qa_robusta.rb
189
+ - .gemtest
190
+ homepage: https://cyberconnect.biz/opensource/qa_robusta.html
191
+ licenses: []
192
+
193
+ post_install_message:
194
+ rdoc_options:
195
+ - --main
196
+ - README.txt
197
+ require_paths:
198
+ - lib
199
+ required_ruby_version: !ruby/object:Gem::Requirement
200
+ none: false
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: "0"
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ none: false
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: "0"
211
+ requirements: []
212
+
213
+ rubyforge_project: qa_robusta
214
+ rubygems_version: 1.8.10
215
+ signing_key:
216
+ specification_version: 3
217
+ summary: QA Robusta is an automation framework easing pain points away from automation test case writers
218
+ test_files:
219
+ - test/test_qa_robusta.rb