awetestlib 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitattributes ADDED
@@ -0,0 +1,22 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
3
+
4
+ # Custom for Visual Studio
5
+ *.cs diff=csharp
6
+ *.sln merge=union
7
+ *.csproj merge=union
8
+ *.vbproj merge=union
9
+ *.fsproj merge=union
10
+ *.dbproj merge=union
11
+
12
+ # Standard to msysgit
13
+ *.doc diff=astextplain
14
+ *.DOC diff=astextplain
15
+ *.docx diff=astextplain
16
+ *.DOCX diff=astextplain
17
+ *.dot diff=astextplain
18
+ *.DOT diff=astextplain
19
+ *.pdf diff=astextplain
20
+ *.PDF diff=astextplain
21
+ *.rtf diff=astextplain
22
+ *.RTF diff=astextplain
data/.gitignore ADDED
@@ -0,0 +1,69 @@
1
+ awetestlib*.gem
2
+ *.csv
3
+
4
+ # gVim tmp files
5
+ *~
6
+ # rcov generated
7
+ coverage
8
+
9
+ # rdoc generated
10
+ rdoc
11
+
12
+ # yard generated
13
+ doc
14
+ .yardoc
15
+
16
+ # bundler
17
+ .bundle
18
+ Gemfile.lock
19
+
20
+ # jeweler generated
21
+ pkg
22
+
23
+ # for windows
24
+ Thumb.db
25
+
26
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
27
+ #
28
+ # * Create a file at ~/.gitignore
29
+ # * Include files you want ignored
30
+ # * Run: git config --global core.excludesfile ~/.gitignore
31
+ #
32
+ # After doing this, these files will be ignored in all your git projects,
33
+ # saving you from having to 'pollute' every project you touch with them
34
+ #
35
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
36
+ #
37
+ # For MacOS:
38
+ #
39
+ .DS_Store
40
+ tmp/*
41
+ .rvmrc
42
+
43
+ # For TextMate
44
+ #*.tmproj
45
+ #tmtags
46
+
47
+ # For emacs:
48
+ #*~
49
+ #\#*
50
+ #.\#*
51
+
52
+ # For vim:
53
+ *.sw[onp]
54
+
55
+ # For redcar:
56
+ #.redcar
57
+
58
+ # For rubinius:
59
+ #*.rbc
60
+
61
+ config/win2008.txt
62
+
63
+ __MACOSX/
64
+ short_passing_test/
65
+ dump.rdb
66
+ .idea
67
+ config/settings.yml
68
+ PROJECT_NAME
69
+ *.log
Binary file
@@ -0,0 +1,57 @@
1
+ # -*- encoding: utf-8 -*-
2
+ puts "#{$0}"
3
+ require "lib/version"
4
+
5
+ #hack for debugging
6
+ `wellsproxy`
7
+ #end hack
8
+
9
+ Gem::Specification.new do |s|
10
+
11
+ s.name = "awetestlib"
12
+ s.version = Awetestlib::VERSION
13
+ s.date = Awetestlib::VERSION_DATE
14
+ s.platform = Gem::Platform::RUBY
15
+
16
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
17
+ s.authors = ["Anthony Woo", "Patrick Neve"]
18
+ s.email = %q{patrick@3qilabs.com}
19
+ s.summary = %q{Awetest DSL for automated testing of browser-based applications.}
20
+ s.homepage = %q{http://3qilabs.com}
21
+ s.description = %q{Awetest DSL for automated testing of browser-based applications.}
22
+
23
+ # possible dependencies (from shamisen gemfile)
24
+ #s.add_dependency('i18n')
25
+
26
+ # windows specific
27
+ #s.add_dependency('watir', '1.8.1')
28
+ #s.add_dependency('commonwatir', '1.8.1')
29
+ #s.add_dependency('firewatir', '1.8.1')
30
+ #s.add_dependency('watirloo')
31
+ #s.add_dependency('win32-process')
32
+ #s.add_dependency('win32screenshot')
33
+
34
+ # all platforms?
35
+ begin
36
+ #s.add_dependency('ffi', '= 1.0.9')
37
+ s.add_dependency('activesupport', '~> 3.0.0')
38
+ s.add_dependency('watir-webdriver')
39
+ s.add_dependency('andand')
40
+ s.add_dependency('spreadsheet', '0.6.8')
41
+ s.add_dependency('google-spreadsheet-ruby', '0.1.6')
42
+ s.add_dependency('roo', '1.10.1')
43
+ #s.add_dependency('selenium-client') # for running selenium scripts
44
+ s.add_dependency('selenium-webdriver')
45
+ rescue
46
+ puts "#{$!}"
47
+ end
48
+
49
+ s.require_paths = ["lib","ext"]
50
+ s.files = `git ls-files`.split("\n")
51
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
52
+
53
+ #This line tells rubygems to look for an extension to install
54
+ s.extensions << 'ext/mkrf_conf.rb'
55
+
56
+ end
57
+
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require "lib/version"
3
+
4
+ Gem::Specification.new do |s|
5
+
6
+ s.name = %q{awetestlib}
7
+ s.version = Awetestlib::VERSION
8
+ s.date = Awetestlib::VERSION_DATE
9
+ s.platform = Gem::Platform::CURRENT
10
+
11
+ #s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["Anthony Woo", "Patrick Neve"]
13
+ s.email = %q{patrick@3qilabs.com}
14
+ s.summary = %q{Awetest DSL for automated testing of browser-based applications.}
15
+ s.homepage = %q{http://3qilabs.com}
16
+ s.description = %q{Awetest DSL for automated testing of browser-based applications.}
17
+
18
+ s.add_dependency('watir-webdriver')
19
+ s.add_dependency('watir', '1.8.1')
20
+ s.add_dependency('commonwatir', '1.8.1')
21
+ s.add_dependency('firewatir', '1.8.1')
22
+ s.add_dependency('activesupport', '~> 3.0.0')
23
+ s.add_dependency('i18n')
24
+ s.add_dependency('andand')
25
+ s.add_dependency('watirloo')
26
+ s.add_dependency('win32-process')
27
+ s.add_dependency('win32screenshot')
28
+ s.add_dependency('spreadsheet', '0.6.8')
29
+ s.add_dependency('google-spreadsheet-ruby', '0.1.6')
30
+ s.add_dependency('roo', '1.10.1')
31
+ s.add_dependency('selenium-webdriver')
32
+ s.add_dependency('pry')
33
+ s.add_dependency('rdoc', '~> 3.11')
34
+
35
+
36
+ s.require_paths = ["lib"]
37
+ s.files = `git ls-files`.split("\n")
38
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
39
+
40
+ end
41
+
@@ -0,0 +1,4 @@
1
+ = does not include patch for IE 7.0 or earlier modal dialog window title ('Web Page Dialog' vs. 'Webpage Dialog')
2
+ See 'http://github.com/radamanthus/watir'
3
+ = user must download chromedriver.exe and put somewhere in PATH ( ruby\bin works )
4
+
@@ -0,0 +1,43 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require "lib/version"
3
+
4
+ Gem::Specification.new do |s|
5
+
6
+ s.name = %q{awetestlib}
7
+ s.version = Awetestlib::VERSION
8
+ s.date = Awetestlib::VERSION_DATE
9
+ s.platform = Gem::Platform::RUBY
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["Anthony Woo", "Patrick Neve"]
13
+ s.email = %q{patrick@3qilabs.com}
14
+ s.summary = %q{Awetest DSL for automated testing of browser-based applications.}
15
+ s.homepage = %q{http://3qilabs.com}
16
+ s.description = %q{Awetest DSL for automated testing of browser-based applications.}
17
+
18
+ s.add_dependency('watir-webdriver')
19
+ #s.add_dependency('watir', '1.8.1')
20
+ #s.add_dependency('commonwatir', '1.8.1')
21
+ #s.add_dependency('firewatir', '1.8.1')
22
+ s.add_dependency('activesupport', '~> 3.0.0')
23
+ s.add_dependency('andand')
24
+ #s.add_dependency('watirloo')
25
+ #s.add_dependency('win32-process')
26
+ #s.add_dependency('win32screenshot')
27
+ s.add_dependency('spreadsheet', '0.6.8')
28
+ s.add_dependency('google-spreadsheet-ruby', '0.1.6')
29
+ s.add_dependency('roo', '1.10.1')
30
+ s.add_dependency('multipart-post', '1.1.4')
31
+ s.add_dependency('selenium-webdriver')
32
+ s.add_dependency('nokogiri')
33
+
34
+
35
+ s.require_paths = ["lib"] #,"ext"]
36
+ s.files = `git ls-files`.split("\n")
37
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
38
+
39
+ #This line tells rubygems to look for an extension to install
40
+ #s.extensions = ["ext\\mkrf_conf.rb"]
41
+
42
+ end
43
+
data/bin/awetestlib ADDED
@@ -0,0 +1,67 @@
1
+ $: << "./lib"
2
+ require 'optparse'
3
+ require 'awetestlib'
4
+
5
+ options = { }
6
+ OptionParser.new do |opts|
7
+ opts.banner = "Usage: awetestlib <script_file> [options]"
8
+
9
+ opts.on("-m RUN_MODE", "--run_mode RUN_MODE", "Specify the run mode: local, local_zip, remote_zip") do |run_mode|
10
+ options[:run_mode] = run_mode
11
+ end
12
+ opts.on("-r ROOT_PATH", "--root_path ROOT_PATH", "Specify the root path") do |root_path|
13
+ options[:root_path] = root_path
14
+ end
15
+ opts.on("-l LIBRARY", "--library LIBRARY", "Specify a library to be loaded") do |library|
16
+ options[:library] = library.to_s
17
+ end
18
+ opts.on("-x EXCEL_FILE", "--excel EXCEL_FILE", "Specify an excel file containing variables to be loaded") do |xls_path|
19
+ options[:xls_path] = xls_path
20
+ end
21
+ opts.on("-b BROWSER", "--browser BROWSER", "Specify a browser (IE, FF, S, C)") do |browser|
22
+ options[:browser] = browser
23
+ end
24
+ opts.on("-v VERSION", "--version VERSION", "Specify a browser version") do |v|
25
+ options[:version] = v
26
+ end
27
+ opts.on("-e", "--environment_url ENVIRONMENT_URL", "Specify the environment URL") do |environment_url|
28
+ options[:environment_url] = environment_url
29
+ end
30
+ opts.on("-f", "--environment_node_name ENVIRONMENT_NODENAME", "Specify the environment node name") do |node_name|
31
+ options[:environment_nodename] = node_name
32
+ end
33
+ opts.on("-n", "--environment_name ENVIRONMENT_NAME", "Specify the environment name") do |environment_name|
34
+ options[:environment_name] = environment_name
35
+ end
36
+ opts.on("-u SELENIUM_REMOTE_URL", "--selenium_remote_url SELENIUM_REMOTE_URL", "Specify the device's remote url and port") do |remote_url|
37
+ options[:remote_url] = remote_url
38
+ end
39
+ opts.on("-s SCREENCAP_PATH", "--screencap-path SCREENCAP_PATH", "Specify the path where screenshots will be saved") do |screencap_path|
40
+ options[:screencap_path] = screencap_path
41
+ end
42
+ opts.on("-d", "--debug", "Run debugger on first script failure") do
43
+ options[:debug_on_fail] = true
44
+ end
45
+ # add persistent logging for awetestlib. pmn 05jun2012
46
+ opts.on("-o", "--output_to_log", "Write to log file") do
47
+ options[:output_to_log] = true
48
+ end
49
+ opts.on("", "--log_path_subdir LOG_PATH_SUBDIR", "Specify log path relative to root_path.") do |log_path_subdir|
50
+ options[:log_path_subdir] = log_path_subdir
51
+ end
52
+ opts.on("", "--report_all_test_refs REPORT_ALL_TEST_REFS", "Include list of all error/test case reference ids actually validated.") do
53
+ options[:report_all_test_refs] = true
54
+ end
55
+
56
+ end.parse!
57
+
58
+ options[:environment] ||= {}
59
+ options[:environment]["name"] = options[:environment_name]
60
+ options[:environment]["url"] = options[:environment_url]
61
+ options[:environment]["nodename"] = options[:environment_nodename]
62
+ options[:script_type] = 'AwetestLegacy'
63
+ options[:script_file] = ARGV[0]
64
+
65
+ IS_WIN_2008 = File.exists?("config/win2008.txt")
66
+
67
+ Awetestlib::Runner.new(options).start
data/ext/Rakefile ADDED
@@ -0,0 +1 @@
1
+ task :default
data/ext/mkrf_conf.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'rubygems/dependency_installer.rb'
2
+ using_windows = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
3
+ #using_jruby = defined?(JRUBY_VERSION)
4
+ using_osx = RUBY_PLATFORM =~ /darwin/
5
+ installer = Gem::DependencyInstaller.new
6
+ begin
7
+ puts "#{RUBY_PLATFORM}"
8
+ if using_windows
9
+ installer.install "watirloo", ">=0"
10
+ installer.install "win32-process", ">=0"
11
+ installer.install "win32-screenshot", ">=0"
12
+ installer.install "commonwatir", "=1.8.1"
13
+ installer.install "watir", "=1.8.1"
14
+ installer.install "firewatir", "=1.8.1"
15
+ elsif using_osx
16
+ installer.install "rb_appscript", ">=0"
17
+ installer.install "safariwatir", ">=0"
18
+ end
19
+
20
+ rescue
21
+ puts "#{$!}"
22
+ exit(1)
23
+ end
24
+
25
+ f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w")
26
+ f.write("task :default\n")
27
+ f.close
data/lib/awetestlib.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'yaml'
2
+ require 'active_support/core_ext/hash'
3
+
4
+ module Awetestlib
5
+ ::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
6
+ ::USING_OSX = RUBY_PLATFORM =~ /darwin/
7
+
8
+ BROWSER_MAP = {
9
+ 'FF' => 'Firefox',
10
+ 'IE' => 'Internet Explorer',
11
+ 'S' => 'Safari',
12
+ 'MS' => 'Mobile Safari',
13
+ 'C' => 'Chrome'
14
+ }
15
+
16
+ BROWSER_ALTERNATES = {
17
+ 'OSX' => { 'IE' => 'S' },
18
+ 'Windows' => { 'S' => 'IE' }
19
+ }
20
+
21
+ if USING_WINDOWS
22
+ #require 'win32ole' <-- We'll load this later in Shamisen::AwetestLegacy::Runner. It has to be loaded after watir, see https://www.pivotaltracker.com/story/show/19249981
23
+ require 'win32/screenshot'
24
+ end
25
+ #require 'active_support/inflector'
26
+ #require 'active_support/core_ext/object'
27
+ #require 'active_support/core_ext/hash'
28
+
29
+ require 'andand'
30
+ require 'regression/runner'
31
+
32
+
33
+ if USING_OSX
34
+ require 'appscript'
35
+ end
36
+
37
+ require 'roo'
38
+
39
+ end
@@ -0,0 +1,2 @@
1
+ We put here small monkey patches to the gems we use.
2
+ This is the easier path when we sometimes just need to override or add a few methods in a gem; we don't really need to fork it.
@@ -0,0 +1,106 @@
1
+ module FireWatir
2
+ class Firefox
3
+
4
+ def close
5
+
6
+ if js_eval("getWindows().length").to_i == 1
7
+ js_eval("getWindows()[0].close()")
8
+
9
+ if current_os == :macosx
10
+ %x{ osascript -e 'tell application "Firefox" to quit' }
11
+ end
12
+
13
+ # wait for the app to close properly
14
+ @t.join if @t
15
+ else
16
+ # Check if window exists, because there may be the case that it has been closed by click event on some element.
17
+ # For e.g: Close Button, Close this Window link etc.
18
+ window_number = find_window(:url, @window_url)
19
+
20
+ # If matching window found. Close the window.
21
+ if window_number.try(:>, 0)
22
+ js_eval "getWindows()[#{window_number}].close()"
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+
29
+
30
+ # Waits for the page to get loaded.
31
+ def wait(last_url = nil)
32
+ #puts "In wait function "
33
+ isLoadingDocument = ""
34
+ start = Time.now
35
+
36
+ while isLoadingDocument != "false"
37
+ # MONKEYPATCH - START
38
+ isLoadingDocument = js_eval("#{browser_var}=#{window_var}.getBrowser(); #{browser_var}.webProgress.isLoadingDocument;") rescue return
39
+ # MONKEYPATCH - END
40
+ #puts "Is browser still loading page: #{isLoadingDocument}"
41
+
42
+ # Raise an exception if the page fails to load
43
+ if (Time.now - start) > 300
44
+ raise "Page Load Timeout"
45
+ end
46
+ end
47
+ # If the redirect is to a download attachment that does not reload this page, this
48
+ # method will loop forever. Therefore, we need to ensure that if this method is called
49
+ # twice with the same URL, we simply accept that we're done.
50
+ url = js_eval("#{browser_var}.contentDocument.URL")
51
+
52
+ if(url != last_url)
53
+ # Check for Javascript redirect. As we are connected to Firefox via JSSh. JSSh
54
+ # doesn't detect any javascript redirects so check it here.
55
+ # If page redirects to itself that this code will enter in infinite loop.
56
+ # So we currently don't wait for such a page.
57
+ # wait variable in JSSh tells if we should wait more for the page to get loaded
58
+ # or continue. -1 means page is not redirected. Anyother positive values means wait.
59
+ jssh_command = "var wait = -1; var meta = null; meta = #{browser_var}.contentDocument.getElementsByTagName('meta');
60
+ if(meta != null)
61
+ {
62
+ var doc_url = #{browser_var}.contentDocument.URL;
63
+ for(var i=0; i< meta.length;++i)
64
+ {
65
+ var content = meta[i].content;
66
+ var regex = new RegExp(\"^refresh$\", \"i\");
67
+ if(regex.test(meta[i].httpEquiv))
68
+ {
69
+ var arrContent = content.split(';');
70
+ var redirect_url = null;
71
+ if(arrContent.length > 0)
72
+ {
73
+ if(arrContent.length > 1)
74
+ redirect_url = arrContent[1];
75
+
76
+ if(redirect_url != null)
77
+ {
78
+ regex = new RegExp(\"^.*\" + redirect_url + \"$\");
79
+ if(!regex.test(doc_url))
80
+ {
81
+ wait = arrContent[0];
82
+ }
83
+ }
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ wait;"
90
+ wait_time = js_eval(jssh_command).to_i
91
+ begin
92
+ if(wait_time != -1)
93
+ sleep(wait_time)
94
+ # Call wait again. In case there are multiple redirects.
95
+ js_eval "#{browser_var} = #{window_var}.getBrowser()"
96
+ wait(url)
97
+ end
98
+ rescue
99
+ end
100
+ end
101
+ set_browser_document()
102
+ run_error_checks()
103
+ return self
104
+ end
105
+ end
106
+ end