test-factory 0.0.4 → 0.0.5

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-factory (0.0.4)
4
+ test-factory (0.0.5)
5
5
  watir-webdriver (>= 0.6.1)
6
6
 
7
7
  GEM
@@ -3,6 +3,32 @@ module DateFactory
3
3
 
4
4
  MONTHS = %w{JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC}
5
5
 
6
+ # Takes a time object and returns a hash containing
7
+ # various parts of the relevant date.
8
+ # @param time_object [Time] the moment you want to convert
9
+ # @returns [Hash] a hash object containing various parts of the date/time you passed to the method
10
+ def date_factory(time_object)
11
+ {
12
+ :sakai=>make_date(time_object),
13
+ :sakai_rounded=>make_date(time_object).gsub!(/:\d+/, ":#{Time.at(time_object.to_i/(5*60)*(5*60)).strftime("%M")}"), # Date with time rounded to nearest 5-minute mark.
14
+ :short_date=>time_object.strftime("%b %-d, %Y"), # => "Oct 18, 2013"
15
+ :samigo=>time_object.strftime("%m/%d/%Y %I:%M:%S %p"), # => "10/30/2012 07:02:05 AM"
16
+ :MON => time_object.strftime("%^b"), # => "DEC"
17
+ :Mon => time_object.strftime("%b"), # => "Jan"
18
+ :Month => time_object.strftime("%B"), # => "February"
19
+ :month_int => time_object.month, # => 3
20
+ :day_of_month => time_object.day, # => 17 Note this is not zero-padded
21
+ :weekday => time_object.strftime("%A"), # => "Monday"
22
+ :wkdy => time_object.strftime("%a"), # => "Tue"
23
+ :year => time_object.year, # => 2013
24
+ :hour => time_object.strftime("%I").to_i, # => "07" Zero-padded, 12-hour clock
25
+ :minute => (time_object).strftime("%M"), # => "02" Zero-padded
26
+ :minute_rounded => (Time.at(time_object.to_i/(5*60)*(5*60))).strftime("%M"), # => "05" Zero-padded, rounded to 5-minute increments
27
+ :meridian => time_object.strftime("%P"), # => "pm"
28
+ :MERIDIAN => time_object.strftime("%p") # => "AM"
29
+ }
30
+ end
31
+
6
32
  def an_hour_ago
7
33
  date_factory(Time.now - 3600)
8
34
  end
@@ -108,30 +134,4 @@ module DateFactory
108
134
  return month + day + year + hour.to_s + mins
109
135
  end
110
136
 
111
- # Takes a time object and returns a hash containing
112
- # various parts of the relevant date.
113
- # @param time_object [Time] the moment you want to convert
114
- # @returns [Hash] a hash object containing various parts of the date/time you passed to the method
115
- def date_factory(time_object)
116
- {
117
- :sakai=>make_date(time_object),
118
- :sakai_rounded=>make_date(time_object).gsub!(/:\d+/, ":#{Time.at(time_object.to_i/(5*60)*(5*60)).strftime("%M")}"), # Date with time rounded to nearest 5-minute mark.
119
- :short_date=>time_object.strftime("%b %-d, %Y"), # => "Oct 18, 2013"
120
- :samigo=>time_object.strftime("%m/%d/%Y %I:%M:%S %p"), # => "10/30/2012 07:02:05 AM"
121
- :MON => time_object.strftime("%^b"), # => "DEC"
122
- :Mon => time_object.strftime("%b"), # => "Jan"
123
- :Month => time_object.strftime("%B"), # => "February"
124
- :month_int => time_object.month, # => 3
125
- :day_of_month => time_object.day, # => 17 Note this is not zero-padded
126
- :weekday => time_object.strftime("%A"), # => "Monday"
127
- :wkdy => time_object.strftime("%a"), # => "Tue"
128
- :year => time_object.year, # => 2013
129
- :hour => time_object.strftime("%I").to_i, # => "07" Zero-padded, 12-hour clock
130
- :minute => (time_object).strftime("%M"), # => "02" Zero-padded
131
- :minute_rounded => (Time.at(time_object.to_i/(5*60)*(5*60))).strftime("%M"), # => "05" Zero-padded, rounded to 5-minute increments
132
- :meridian => time_object.strftime("%P"), # => "pm"
133
- :MERIDIAN => time_object.strftime("%p") # => "AM"
134
- }
135
- end
136
-
137
137
  end
@@ -1,6 +1,10 @@
1
1
  module Watir
2
2
  module UserEditable
3
3
 
4
+ # Extends Watir's methods.
5
+ # Use when the argument you are passing to a text field
6
+ # may be nil, in which case you don't
7
+ # want to do anything with the page element.
4
8
  def fit(*args)
5
9
  unless args==nil
6
10
  assert_exists
@@ -13,6 +17,10 @@ module Watir
13
17
  end
14
18
 
15
19
  class Select
20
+ # Extends Watir's methods.
21
+ # Use when the argument you are passing to a text field
22
+ # may be nil, in which case you don't
23
+ # want to do anything with the page element.
16
24
  def fit(str_or_rx)
17
25
  select_by :text, str_or_rx unless str_or_rx==nil
18
26
  end
@@ -13,18 +13,25 @@ class PageFactory
13
13
 
14
14
  class << self
15
15
 
16
+ # Define this in a page class and when you use the "visit" method to instantiate the class
17
+ # it will enter the URL the browser's address bar.
16
18
  def page_url url
17
19
  define_method 'goto' do
18
20
  @browser.goto url
19
21
  end
20
22
  end
21
23
 
24
+ # Define this in a page class and when that class is instantiated it will wait until that
25
+ # element appears on the page before continuing with the script.
22
26
  def expected_element element_name, timeout=30
23
27
  define_method 'expected_element' do
24
28
  self.send(element_name).wait_until_present timeout
25
29
  end
26
30
  end
27
31
 
32
+ # Define this in a page class and when the class is instantiated it will verify that
33
+ # the browser's title matches the expected title. If there isn't a match, it raises an
34
+ # error and halts the script.
28
35
  def expected_title expected_title
29
36
  define_method 'has_expected_title?' do
30
37
  has_expected_title = expected_title.kind_of?(Regexp) ? expected_title =~ @browser.title : expected_title == @browser.title
@@ -32,6 +39,8 @@ class PageFactory
32
39
  end
33
40
  end
34
41
 
42
+ # The basic building block of the page object classes.
43
+ # Use in conjunction with Watir to define all elements on a given page that are important to validate.
35
44
  def element element_name
36
45
  raise "#{element_name} is being defined twice in #{self}!" if self.instance_methods.include?(element_name.to_sym)
37
46
  define_method element_name.to_s do
@@ -39,14 +48,13 @@ class PageFactory
39
48
  end
40
49
  end
41
50
  alias :value :element
42
- alias :thing :element
43
51
 
52
+ # The basic building block for interacting with elements on a page, such as links and buttons.
44
53
  def action method_name, &block
45
54
  define_method method_name.to_s do |*thing|
46
55
  Proc.new(&block).call *thing, self
47
56
  end
48
57
  end
49
- alias :pgmd :action
50
58
 
51
59
  end
52
60
 
@@ -74,8 +74,7 @@ module StringFactory
74
74
  #
75
75
  # @param word_count [Integer] The count of "words" in the string, separated by spaces or line feeds. If no parameters are provided, the method will return two alphanumeric "words" on two lines.
76
76
  # @param line_count [Integer] The count of line feeds that will be randomly placed throughout the string
77
- # @param char_type [:symbol] Determines the character content
78
- # of the string.
77
+ # @param char_type [:symbol] Determines the character content of the string.
79
78
  #
80
79
  # @example
81
80
  #
@@ -106,23 +105,12 @@ module StringFactory
106
105
  #
107
106
  # The strings are organized by length, with the shorter ones
108
107
  # first. There are 102 strings.
108
+ # @param number [Integer] Should be a number between 1 and 102
109
109
  def random_xss_string(number=102)
110
- if number > 102
111
- number = 102
112
- end
110
+ number > 102 ? number = 102 : number
113
111
  xss = ["<PLAINTEXT>", "\\\";alert('XSS');//", "'';!--\"<XSS>=&{()}", "<IMG SRC=\"mocha:alert('XSS')\">", "<BODY ONLOAD=alert('XSS')>", "<BODY ONLOAD =alert('XSS')>", "<BR SIZE=\"&{alert('XSS')}\">", "¼script¾alert(¢XSS¢)¼/script¾", "<IMG SRC=\"livescript:alert('XSS')\">", "<SCRIPT SRC=//ha.ckers.org/.j>", "<IMG SRC=javascript:alert('XSS')>", "<IMG SRC=JaVaScRiPt:alert('XSS')>", "<<SCRIPT>alert(\"XSS\");//<</SCRIPT>", "<IMG SRC=\"javascript:alert('XSS')\"", "<IMG SRC='vbscript:msgbox(\"XSS\")'>", "<A HREF=\"http://1113982867/\">XSS</A>", "<IMG SRC=\"javascript:alert('XSS');\">", "<IMG SRC=\"jav\tascript:alert('XSS');\">", "<XSS STYLE=\"behavior: url(xss.htc);\">", "</TITLE><SCRIPT>alert(\"XSS\");</SCRIPT>", "<IMG DYNSRC=\"javascript:alert('XSS')\">", "<A HREF=\"http://66.102.7.147/\">XSS</A>", "<IMG LOWSRC=\"javascript:alert('XSS')\">", "<BGSOUND SRC=\"javascript:alert('XSS');\">", "<BASE HREF=\"javascript:alert('XSS');//\">", "<IMG \"\"\"><SCRIPT>alert(\"XSS\")</SCRIPT>\">", "<SCRIPT>a=/XSS/ alert(a.source)</SCRIPT>", "<IMG SRC=\"jav&#x0D;ascript:alert('XSS');\">", "<IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">", "<XSS STYLE=\"xss:expression(alert('XSS'))\">", "<IMG SRC=\"jav&#x09;ascript:alert('XSS');\">", "<SCRIPT SRC=http://ha.ckers.org/xss.js?<B>", "<IMG SRC=\" &#14; javascript:alert('XSS');\">", "<IMG SRC=javascript:alert(&quot;XSS&quot;)>", "<BODY BACKGROUND=\"javascript:alert('XSS')\">", "<TABLE BACKGROUND=\"javascript:alert('XSS')\">", "<DIV STYLE=\"width: expression(alert('XSS'));\">", "<TABLE><TD BACKGROUND=\"javascript:alert('XSS')\">", "<iframe src=http://ha.ckers.org/scriptlet.html <", "<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>", "<IFRAME SRC=\"javascript:alert('XSS');\"></IFRAME>", "<A HREF=\"http://0x42.0x0000066.0x7.0x93/\">XSS</A>", "<IMG STYLE=\"xss:expr/*XSS*/ession(alert('XSS'))\">", "<A HREF=\"http://0102.0146.0007.00000223/\">XSS</A>", "<IMG SRC=`javascript:alert(\"RSnake says, 'XSS'\")`>", "<SCRIPT/SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<SCRIPT SRC=\"http://ha.ckers.org/xss.jpg\"></SCRIPT>", "<STYLE TYPE=\"text/javascript\">alert('XSS');</STYLE>", "<BODY onload!\#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"XSS\")>", "<INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert('XSS');\">", "<STYLE>@im\\port'\\ja\\vasc\\ript:alert(\"XSS\")';</STYLE>", "<STYLE>@import'http://ha.ckers.org/xss.css';</STYLE>", "<SCRIPT/XSS SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<? echo('<SCR)'; echo('IPT>alert(\"XSS\")</SCRIPT>'); ?>", "<SCRIPT =\">\" SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<LINK REL=\"stylesheet\" HREF=\"javascript:alert('XSS');\">", "<SCRIPT a=`>` SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<SCRIPT a=\">\" SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<LAYER SRC=\"http://ha.ckers.org/scriptlet.html\"></LAYER>", "<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>", "<SCRIPT \"a='>'\" SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<LINK REL=\"stylesheet\" HREF=\"http://ha.ckers.org/xss.css\">", "<SCRIPT a=\">'>\" SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<SCRIPT a=\">\" '' SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<FRAMESET><FRAME SRC=\"javascript:alert('XSS');\"></FRAMESET>", "<DIV STYLE=\"background-image: url(javascript:alert('XSS'))\">", "perl -e 'print \"<SCR\\0IPT>alert(\\\"XSS\\\")</SCR\\0IPT>\";' > out", "<IMG SRC = \" j a v a s c r i p t : a l e r t ( ' X S S ' ) \" >", "Redirect 302 /a.jpg http://www.rsmart.com/admin.asp&deleteuser", "perl -e 'print \"<IMG SRC=java\\0script:alert(\\\"XSS\\\")>\";' > out", "<!--[if gte IE 4]> <SCRIPT>alert('XSS');</SCRIPT> <![endif]-->", "<DIV STYLE=\"background-image: url(&#1;javascript:alert('XSS'))\">", "<A HREF=\"http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D\">XSS</A>", "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert('XSS');\">", "a=\"get\"; b=\"URL(\\\"\"; c=\"javascript:\"; d=\"alert('XSS');\\\")\"; eval(a+b+c+d);", "<STYLE>BODY{-moz-binding:url(\"http://ha.ckers.org/xssmoz.xml#xss\")}</STYLE>", "<EMBED SRC=\"http://ha.ckers.org/xss.swf\" AllowScriptAccess=\"always\"></EMBED>", "<STYLE type=\"text/css\">BODY{background:url(\"javascript:alert('XSS')\")}</STYLE>", "<STYLE>li {list-style-image: url(\"javascript:alert('XSS')\");}</STYLE><UL><LI>XSS", "<META HTTP-EQUIV=\"Link\" Content=\"<http://ha.ckers.org/xss.css>; REL=stylesheet\">", "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert('XSS');\">", "<OBJECT TYPE=\"text/x-scriptlet\" DATA=\"http://ha.ckers.org/scriptlet.html\"></OBJECT>", "<SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>", "<STYLE>.XSS{background-image:url(\"javascript:alert('XSS')\");}</STYLE><A CLASS=XSS></A>", "<XML SRC=\"xsstest.xml\" ID=I></XML> <SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>", "<META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;\">", "exp/*<A STYLE='no\\xss:noxss(\"*//*\"); xss:&#101;x&#x2F;*XSS*//*/*/pression(alert(\"XSS\"))'>", "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K\">", "<!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://ha.ckers.org/xss.js></SCRIPT>'\"-->", "<OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert('XSS')></OBJECT>", "<HTML xmlns:xss> <?import namespace=\"xss\" implementation=\"http://ha.ckers.org/xss.htc\"> <xss:xss>XSS</xss:xss> </HTML>", "<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>", "<HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-", "<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>", "<XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]><![CDATA[cript:alert('XSS');\">]]> </C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>", "<XML ID=\"xss\"><I><B>&lt;IMG SRC=\"javas<!-- -->cript:alert('XSS')\"&gt;</B></I></XML> <SPAN DATASRC=\"#xss\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>", "<DIV STYLE=\"background-image:\\0075\\0072\\006C\\0028'\\006a\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\0070\\0074\\003a\\0061\\006c\\0065\\0072\\0074\\0028.1027\\0058.1053\\0053\\0027\\0029'\\0029\">", "<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>", "';alert(String.fromCharCode(88,83,83))//\\';alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//\\\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>\">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>", "<HTML><BODY> <?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\"> <?import namespace=\"t\" implementation=\"#default#time2\"> <t:set attributeName=\"innerHTML\" to=\"XSS&lt;SCRIPT DEFER&gt;alert(&quot;XSS&quot;)&lt;/SCRIPT&gt;\"> </BODY></HTML>", "<EMBED SRC=\"data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>"]
114
- x = rand(4)
115
- case(x)
116
- when 0
117
- return xss[rand(number)]
118
- when 1
119
- return %|"| + xss[rand(number)]
120
- when 2
121
- return %|">| + xss[rand(number)]
122
- when 3
123
- return %|>| + xss[rand(number)]
124
- end
125
-
112
+ prepend=[ %|"|, %||, %|">|, %|>| ]
113
+ "#{prepend[rand(prepend.length)]} #{xss[rand(number)]}"
126
114
  end
127
115
 
128
116
  # Returns a random hex string that matches an HTML color value.
data/test-factory.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'test-factory'
3
- s.version = '0.0.4'
3
+ s.version = '0.0.5'
4
4
  s.summary = %q{rSmart's framework for creating automated testing scripts}
5
5
  s.description = %q{This gem provides a set of modules and methods to help quickly and DRYly create a test automation framework using Ruby and Watir (or watir-webdriver).}
6
6
  s.files = Dir.glob("**/**/**")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: