rwebunit 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,6 +1,11 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ == 0.2.0
5
+
6
+ Added wait_ajax
7
+ ?Reuse IE instance cross testcases
8
+
4
9
  == 0.1.1
5
10
 
6
11
  New jWebUnit API methods implemented:
data/Rakefile CHANGED
@@ -5,12 +5,11 @@ require 'rake/rdoctask'
5
5
  Gem::manage_gems
6
6
  require 'rake/gempackagetask'
7
7
 
8
-
9
8
  $:.unshift(File.dirname(__FILE__) + "/lib")
10
9
  require 'rwebunit'
11
10
 
12
11
  desc "Default task"
13
- task :default => [ :clean, :test ]
12
+ task :default => [ :clean, :test , :gem]
14
13
 
15
14
  desc "Clean generated files"
16
15
  task :clean do
@@ -37,7 +36,7 @@ Rake::RDocTask.new { |rdoc|
37
36
  spec = Gem::Specification.new do |s|
38
37
  s.platform= Gem::Platform::RUBY
39
38
  s.name = "rwebunit"
40
- s.version = "0.1.1"
39
+ s.version = "0.2.0"
41
40
  s.summary = "An wrap of WATIR for functional testing of web applications"
42
41
  # s.description = ""
43
42
 
@@ -5,15 +5,15 @@
5
5
 
6
6
  module RWebUnit
7
7
 
8
- ##
9
- # Store test optionns
10
- #
11
- class TestContext
12
- attr_accessor :base_url
8
+ ##
9
+ # Store test optionns
10
+ #
11
+ class TestContext
12
+ attr_accessor :base_url
13
13
 
14
- def setBaseUrl(baseUrl)
15
- @base_url = baseUrl
16
- end
17
- end
14
+ def setBaseUrl(baseUrl)
15
+ @base_url = baseUrl
16
+ end
17
+ end
18
18
 
19
- end
19
+ end
@@ -4,77 +4,77 @@
4
4
  #***********************************************************
5
5
 
6
6
  module RWebUnit
7
- module Utils
8
-
9
- #useful methods for test data
10
- def getToday_AU()
11
- format_date(Time.now, "%02d/%02d/%04d")
12
- end
13
- alias getToday getToday_AU
14
-
15
- def getToday_US()
16
- sprintf("%02d/%02d/%04d", Time.now.month, Time.now.day, Time.now.year)
17
- end
18
-
19
- def getDaysBefore(days)
20
- nil if !(days.instance_of?(Fixnum))
21
- format_date(Time.now - days * 24 * 3600)
22
- end
23
-
24
- def getYesterday
25
- getDaysBefore(1)
26
- end
27
-
28
- def getDaysAfter(days)
29
- nil if !(days.instance_of?(Fixnum))
30
- format_date(Time.now + days * 24 * 3600)
31
- end
32
-
33
- def getTomorrow
34
- getDaysAfter(1)
35
- end
36
-
37
- #TODO: getDaysBefore, getDaysAfter, getYesterday, getTomorrow
38
-
39
- # return a random number >= min, but <= max
40
- def randomNumber(min, max)
41
- rand(max-min+1)+min
42
- end
43
-
44
- def randomBoolean()
45
- return randomNumber(0, 1) == 1
46
- end
47
-
48
- def randomChar(lowercase)
49
- sprintf("%c", random_number(97, 122)) if lowercase
50
- sprintf("%c", random_number(65, 90)) unless lowercase
51
- end
52
-
53
- def randomDigit()
54
- sprintf("%c", randomNumber(48, 57))
55
- end
56
-
57
- def randomString(length, lowercase)
58
- randomStr = ""
59
- length.times {
60
- randomStr += randomChar(lowercase)
61
- }
62
- randomStr
63
- end
64
-
65
- # Return a random string in a rangeof pre-defined strings
66
- def randomStringInCollection(arr)
67
- return nil if arr.empty?
68
- index = random_number(0, arr.length-1)
69
- arr[index]
70
- end
71
-
72
- private
73
- def format_date(date, date_format = nil)
74
- date_format ||= "%02d/%02d/%04d"
75
- sprintf(date_format, date.day, date.month, date.year)
76
- end
77
-
78
-
79
- end
7
+ module Utils
8
+
9
+ #useful methods for test data
10
+ def getToday_AU()
11
+ format_date(Time.now, "%02d/%02d/%04d")
12
+ end
13
+ alias getToday getToday_AU
14
+
15
+ def getToday_US()
16
+ sprintf("%02d/%02d/%04d", Time.now.month, Time.now.day, Time.now.year)
17
+ end
18
+
19
+ def getDaysBefore(days)
20
+ nil if !(days.instance_of?(Fixnum))
21
+ format_date(Time.now - days * 24 * 3600)
22
+ end
23
+
24
+ def getYesterday
25
+ getDaysBefore(1)
26
+ end
27
+
28
+ def getDaysAfter(days)
29
+ nil if !(days.instance_of?(Fixnum))
30
+ format_date(Time.now + days * 24 * 3600)
31
+ end
32
+
33
+ def getTomorrow
34
+ getDaysAfter(1)
35
+ end
36
+
37
+ #TODO: getDaysBefore, getDaysAfter, getYesterday, getTomorrow
38
+
39
+ # return a random number >= min, but <= max
40
+ def randomNumber(min, max)
41
+ rand(max-min+1)+min
42
+ end
43
+
44
+ def randomBoolean()
45
+ return randomNumber(0, 1) == 1
46
+ end
47
+
48
+ def randomChar(lowercase)
49
+ sprintf("%c", random_number(97, 122)) if lowercase
50
+ sprintf("%c", random_number(65, 90)) unless lowercase
51
+ end
52
+
53
+ def randomDigit()
54
+ sprintf("%c", randomNumber(48, 57))
55
+ end
56
+
57
+ def randomString(length, lowercase)
58
+ randomStr = ""
59
+ length.times {
60
+ randomStr += randomChar(lowercase)
61
+ }
62
+ randomStr
63
+ end
64
+
65
+ # Return a random string in a rangeof pre-defined strings
66
+ def randomStringInCollection(arr)
67
+ return nil if arr.empty?
68
+ index = random_number(0, arr.length-1)
69
+ arr[index]
70
+ end
71
+
72
+ private
73
+ def format_date(date, date_format = nil)
74
+ date_format ||= "%02d/%02d/%04d"
75
+ sprintf(date_format, date.day, date.month, date.year)
76
+ end
77
+
78
+
79
+ end
80
80
  end
@@ -5,58 +5,82 @@
5
5
 
6
6
  module RWebUnit
7
7
 
8
- # WebPage (children of AbstractWebPage) encapsulates a real web page.
9
- # For example,
10
- # beginAt("/home")
11
- # @browser.clickLinkWithText("/login")
12
- # @browser.setFormElement("username", "sa")
13
- # Can be rewritten to
14
- # beginAt("/home")
15
- # home_page = HomePage.new
16
- # login_page = home_page.clickLoginLink
17
- # login_page.enterUserName("sa")
18
- #
19
- # So you only need change in LoingPage class if UI changes, which happen quite often.
20
- class AbstractWebPage
21
-
22
- # browser: passed to do assertion within the page
23
- # page_text: text used to identify the page, title will be the first candidate
24
- attr_accessor :browser, :page_text
25
-
26
- def initialize(ie, page_text=nil)
27
- @browser = ie
28
- @page_text = page_text
29
- assertOnPage
30
- end
31
-
32
- def assertTextPresent(text)
33
- @browser.assertTextPresent(text)
34
- end
35
-
36
- def assertTextInElement(elementID, text)
37
- @browser.assertTextInElement(elementID, text)
38
- end
39
-
40
- def assertOnPage()
41
- assertTextPresent(@page_text) if @page_text
42
- end
43
-
44
- def assertNotOnPage()
45
- assertTextNotPresent(@page_text) if @page_text
46
- end
47
-
48
- def submit
49
- @browser.submit
50
- end
51
-
52
- def getElementValue(elementId)
53
- @browser.getElemenValue(elementId)
54
- end
55
-
56
- def dumpResponse(stream = nil)
57
- @browser.dumpResponse(stream)
58
- end
59
-
60
- end
8
+ # WebPage (children of AbstractWebPage) encapsulates a real web page.
9
+ # For example,
10
+ # beginAt("/home")
11
+ # @browser.clickLinkWithText("/login")
12
+ # @browser.setFormElement("username", "sa")
13
+ # Can be rewritten to
14
+ # beginAt("/home")
15
+ # home_page = HomePage.new
16
+ # login_page = home_page.clickLoginLink
17
+ # login_page.enterUserName("sa")
18
+ #
19
+ # So you only need change in LoingPage class if UI changes, which happen quite often.
20
+ class AbstractWebPage
21
+
22
+ # browser: passed to do assertion within the page
23
+ # page_text: text used to identify the page, title will be the first candidate
24
+ attr_accessor :browser, :page_text
25
+
26
+ def initialize(ie, page_text=nil)
27
+ @browser = ie
28
+ @page_text = page_text
29
+ assertOnPage
30
+ end
31
+
32
+ def assertTextPresent(text)
33
+ @browser.assertTextPresent(text)
34
+ end
35
+
36
+ def assertTextInElement(elementID, text)
37
+ @browser.assertTextInElement(elementID, text)
38
+ end
39
+
40
+ def assertOnPage()
41
+ assertTextPresent(@page_text) if @page_text
42
+ end
61
43
 
62
- end
44
+ def assertNotOnPage()
45
+ assertTextNotPresent(@page_text) if @page_text
46
+ end
47
+
48
+ def submit
49
+ @browser.submit
50
+ end
51
+
52
+ def getElementValue(elementId)
53
+ @browser.getElemenValue(elementId)
54
+ end
55
+
56
+ def dumpResponse(stream = nil)
57
+ @browser.dumpResponse(stream)
58
+ end
59
+
60
+ # Wait for specific seconds for an Ajax update finish.
61
+ # Trick: In your Rails application,
62
+ # :loading => "Element.show('search_indicator');
63
+ # :complete => "Element.hide('search_indicator');
64
+ #
65
+ # <%= image_tag("indicator.gif", :id => 'search_indicator', :style => 'display:none') %>
66
+ #
67
+ # In your test case:
68
+ # wait_ajax_update("search_indicator", "30)
69
+ #
70
+ # Warning: this method has not been fully tested, if you are not using Rails, change your parameter accordingly.
71
+ #
72
+ def wait_ajax_update(element_id, seconds)
73
+ count = 0
74
+ while count < (seconds / 2) do
75
+ search_indicator = @browser.getElementById(element_id)
76
+ search_indicator_outer_html = search_indicator.outerHtml if search_indicator
77
+ return true if search_indicator_outer_html && search_indicator_outer_html.include?('style="DISPLAY: none"')
78
+ sleep 2;
79
+ count = count + 1
80
+ end
81
+ return false
82
+ end
83
+
84
+ end
85
+
86
+ end