rsel 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/docs/development.md +8 -3
- data/docs/examples.md +119 -0
- data/docs/history.md +9 -0
- data/docs/index.md +3 -1
- data/docs/locators.md +72 -0
- data/docs/scoping.md +19 -5
- data/docs/todo.md +4 -2
- data/docs/usage.md +2 -2
- data/lib/rsel/exceptions.rb +1 -1
- data/lib/rsel/selenium_test.rb +37 -132
- data/lib/rsel/support.rb +138 -0
- data/rsel.gemspec +1 -1
- data/spec/selenium_test_spec.rb +103 -12
- data/spec/spec_helper.rb +1 -10
- data/spec/support_spec.rb +48 -0
- data/test/app.rb +6 -6
- metadata +8 -39
- data/vendor/rubyslim-0.1.1/.gitignore +0 -7
- data/vendor/rubyslim-0.1.1/README.md +0 -159
- data/vendor/rubyslim-0.1.1/Rakefile +0 -21
- data/vendor/rubyslim-0.1.1/bin/rubyslim +0 -10
- data/vendor/rubyslim-0.1.1/lib/rubyslim/list_deserializer.rb +0 -69
- data/vendor/rubyslim-0.1.1/lib/rubyslim/list_executor.rb +0 -12
- data/vendor/rubyslim-0.1.1/lib/rubyslim/list_serializer.rb +0 -45
- data/vendor/rubyslim-0.1.1/lib/rubyslim/ruby_slim.rb +0 -61
- data/vendor/rubyslim-0.1.1/lib/rubyslim/slim_error.rb +0 -3
- data/vendor/rubyslim-0.1.1/lib/rubyslim/slim_helper_library.rb +0 -23
- data/vendor/rubyslim-0.1.1/lib/rubyslim/socket_service.rb +0 -53
- data/vendor/rubyslim-0.1.1/lib/rubyslim/statement.rb +0 -79
- data/vendor/rubyslim-0.1.1/lib/rubyslim/statement_executor.rb +0 -174
- data/vendor/rubyslim-0.1.1/lib/rubyslim/table_to_hash_converter.rb +0 -32
- data/vendor/rubyslim-0.1.1/lib/test_module/library_new.rb +0 -13
- data/vendor/rubyslim-0.1.1/lib/test_module/library_old.rb +0 -12
- data/vendor/rubyslim-0.1.1/lib/test_module/should_not_find_test_slim_in_here/test_slim.rb +0 -7
- data/vendor/rubyslim-0.1.1/lib/test_module/simple_script.rb +0 -9
- data/vendor/rubyslim-0.1.1/lib/test_module/test_chain.rb +0 -5
- data/vendor/rubyslim-0.1.1/lib/test_module/test_slim.rb +0 -86
- data/vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_arguments.rb +0 -23
- data/vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_no_sut.rb +0 -5
- data/vendor/rubyslim-0.1.1/rubyslim.gemspec +0 -22
- data/vendor/rubyslim-0.1.1/spec/instance_creation_spec.rb +0 -40
- data/vendor/rubyslim-0.1.1/spec/it8f_spec.rb +0 -8
- data/vendor/rubyslim-0.1.1/spec/list_deserializer_spec.rb +0 -66
- data/vendor/rubyslim-0.1.1/spec/list_executor_spec.rb +0 -187
- data/vendor/rubyslim-0.1.1/spec/list_serialzer_spec.rb +0 -38
- data/vendor/rubyslim-0.1.1/spec/method_invocation_spec.rb +0 -127
- data/vendor/rubyslim-0.1.1/spec/slim_helper_library_spec.rb +0 -80
- data/vendor/rubyslim-0.1.1/spec/socket_service_spec.rb +0 -98
- data/vendor/rubyslim-0.1.1/spec/spec_helper.rb +0 -6
- data/vendor/rubyslim-0.1.1/spec/statement_executor_spec.rb +0 -50
- data/vendor/rubyslim-0.1.1/spec/statement_spec.rb +0 -17
- data/vendor/rubyslim-0.1.1/spec/table_to_hash_converter_spec.rb +0 -31
data/lib/rsel/support.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
#require File.join(File.dirname(__FILE__), 'exceptions')
|
2
|
+
|
3
|
+
require 'xpath'
|
4
|
+
|
5
|
+
module Rsel
|
6
|
+
# Support functions for Rsel
|
7
|
+
module Support
|
8
|
+
|
9
|
+
# Execute the given block, and return false if it raises an exception.
|
10
|
+
# Otherwise, return true.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# return_error_status do
|
14
|
+
# # some code that might raise an exception
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
def return_error_status
|
18
|
+
begin
|
19
|
+
yield
|
20
|
+
rescue => e
|
21
|
+
#puts e.message
|
22
|
+
#puts e.backtrace
|
23
|
+
return false
|
24
|
+
else
|
25
|
+
return true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Convert the given locator to a format accepted by Selenium. If `locator`
|
30
|
+
# starts with `id=`, `name=`, `dom=`, `xpath=` `link=` or `css=`, then the
|
31
|
+
# locator is returned unchanged. Otherwise, `locator` is assumed to be a
|
32
|
+
# plain string, and a Selenium-style `xpath=` locator is returned, matching
|
33
|
+
# HTML elements of the given kind, in the given scope. This allows you to
|
34
|
+
# use simple human-readable locator strings, or more specific
|
35
|
+
# Selenium-style locators.
|
36
|
+
#
|
37
|
+
# @param [String] locator
|
38
|
+
# A Selenium-style locator beginning with `id=`, `name=`, `dom=`,
|
39
|
+
# `xpath=`, `link=` or `css=`, or a plain text string that will
|
40
|
+
# automatically match on the `id`, `name`, label, value, or text content
|
41
|
+
# depending on the value of `kind`.
|
42
|
+
# @param [String] kind
|
43
|
+
# What kind of locator you're using (link, button, checkbox, field etc.).
|
44
|
+
# This must correspond to a method name in `XPath::HTML`. If you're using
|
45
|
+
# a raw Selenium-style `locator` string, this argument can be omitted.
|
46
|
+
# @param [Hash] scope
|
47
|
+
# Keywords to restrict the scope of matching elements. Ignored when
|
48
|
+
# a Selenium-style locator is used. See the {#xpath} documentation for
|
49
|
+
# allowed options.
|
50
|
+
#
|
51
|
+
def loc(locator, kind='', scope={})
|
52
|
+
if locator.empty?
|
53
|
+
raise ArgumentError, "locator is required."
|
54
|
+
elsif locator =~ /^(id=|name=|dom=|xpath=|link=|css=)/
|
55
|
+
return locator
|
56
|
+
else
|
57
|
+
return xpath(kind, locator, scope)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
# Return a Selenium-style xpath generated by calling `XPath::HTML.<kind>`
|
63
|
+
# with the given `locator`. If `scope` options are provided, the xpath is
|
64
|
+
# modified accordingly, to match only elements in the given scope.
|
65
|
+
#
|
66
|
+
# @param [String] kind
|
67
|
+
# What kind of locator you're using (link, button, checkbox, field etc.).
|
68
|
+
# This must correspond to a method name in `XPath::HTML`.
|
69
|
+
# @param [String] locator
|
70
|
+
# Name, id, value, label or whatever other locators are accepted by
|
71
|
+
# `XPath::HTML.<kind>`
|
72
|
+
# @param [Hash] scope
|
73
|
+
# Keywords to restrict the scope of matching elements
|
74
|
+
# @option scope [String] :within
|
75
|
+
# Restrict scope to elements having this id, matching `locator` only if
|
76
|
+
# it's contained within an element with this id.
|
77
|
+
# @option scope [String] :in_row
|
78
|
+
# Restrict scope to a table row containing this text, matching `locator`
|
79
|
+
# only if that locator is in the same row as the given text.
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
# xpath('link', 'Log in')
|
83
|
+
# xpath('button', 'Submit')
|
84
|
+
# xpath('field', 'First name')
|
85
|
+
# xpath('table_row', ['First', 'Last'])
|
86
|
+
#
|
87
|
+
def xpath(kind, locator, scope={})
|
88
|
+
if !XPath::HTML.respond_to?(kind)
|
89
|
+
raise ArgumentError, "Unknown kind of locator: '#{kind}'"
|
90
|
+
end
|
91
|
+
loc_xp = XPath::HTML.send(kind, locator)
|
92
|
+
if scope[:within]
|
93
|
+
parent = XPath.descendant[XPath.attr(:id).equals(scope[:within])]
|
94
|
+
result = apply_scope(parent, loc_xp)
|
95
|
+
elsif scope[:in_row]
|
96
|
+
row = XPath.descendant(:tr)[XPath.contains(scope[:in_row])]
|
97
|
+
result = apply_scope(row, loc_xp)
|
98
|
+
else
|
99
|
+
result = loc_xp.to_s
|
100
|
+
end
|
101
|
+
return "xpath=#{result}"
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
# Restrict the scope of all XPath expressions in `inner` by prepending
|
106
|
+
# `container` to each of them, and return new union expression where
|
107
|
+
# `inner` matches only if it's a child of `container`.
|
108
|
+
#
|
109
|
+
def apply_scope(container, inner)
|
110
|
+
scoped_expressions = xpath_expressions(inner).collect do |expr|
|
111
|
+
container.child(expr)
|
112
|
+
end
|
113
|
+
return XPath::Union.new(*scoped_expressions).to_s
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
# Return an array of individual Expressions in the given XPath::Union, or
|
118
|
+
# just `[union]` if it has no sub-expressions. This is an ugly recursive
|
119
|
+
# hack, designed to allow splitting up unions into their constituents for
|
120
|
+
# the purpose of modifying them individually and re-combining them.
|
121
|
+
#
|
122
|
+
# @param [XPath::Union, XPath::Expression] union
|
123
|
+
# The xpath you want to break down into individual expressions
|
124
|
+
#
|
125
|
+
# @since 0.0.3
|
126
|
+
#
|
127
|
+
def xpath_expressions(union)
|
128
|
+
if union.respond_to?(:expressions)
|
129
|
+
return union.expressions.collect do |expr|
|
130
|
+
xpath_expressions(expr)
|
131
|
+
end.flatten
|
132
|
+
else
|
133
|
+
return [union]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
data/rsel.gemspec
CHANGED
data/spec/selenium_test_spec.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
2
|
|
3
3
|
describe Rsel::SeleniumTest do
|
4
|
+
before(:all) do
|
5
|
+
@st = Rsel::SeleniumTest.new('http://localhost:8070/')
|
6
|
+
@st.open_browser
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:all) do
|
10
|
+
@st.close_browser
|
11
|
+
end
|
12
|
+
|
4
13
|
context "initialization" do
|
5
14
|
before(:each) do
|
6
15
|
@st.visit("/")
|
@@ -37,6 +46,18 @@ describe Rsel::SeleniumTest do
|
|
37
46
|
@st.enable_checkbox("Like", :in_row => "Marcus").should be_true
|
38
47
|
end
|
39
48
|
end
|
49
|
+
|
50
|
+
context "checkbox with id=" do
|
51
|
+
it "exists" do
|
52
|
+
@st.enable_checkbox("id=like_cheese").should be_true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "checkbox with xpath=" do
|
57
|
+
it "exists" do
|
58
|
+
@st.enable_checkbox("xpath=//input[@id='like_cheese']").should be_true
|
59
|
+
end
|
60
|
+
end
|
40
61
|
end
|
41
62
|
|
42
63
|
context "fails when" do
|
@@ -77,6 +98,18 @@ describe Rsel::SeleniumTest do
|
|
77
98
|
@st.disable_checkbox("Like", :in_row => "Marcus").should be_true
|
78
99
|
end
|
79
100
|
end
|
101
|
+
|
102
|
+
context "checkbox with id=" do
|
103
|
+
it "exists" do
|
104
|
+
@st.disable_checkbox("id=like_cheese").should be_true
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "checkbox with xpath=" do
|
109
|
+
it "exists" do
|
110
|
+
@st.disable_checkbox("xpath=//input[@id='like_cheese']").should be_true
|
111
|
+
end
|
112
|
+
end
|
80
113
|
end
|
81
114
|
|
82
115
|
context "fails when" do
|
@@ -338,18 +371,33 @@ describe Rsel::SeleniumTest do
|
|
338
371
|
context "#dropdown_equals" do
|
339
372
|
context "passes when" do
|
340
373
|
it "option is selected in the dropdown" do
|
341
|
-
|
342
|
-
|
374
|
+
["Short", "Average", "Tall"].each do |height|
|
375
|
+
@st.select_from_dropdown(height, "Height")
|
376
|
+
@st.dropdown_equals("Height", height).should be_true
|
377
|
+
end
|
378
|
+
end
|
343
379
|
|
344
|
-
|
345
|
-
|
380
|
+
it "option is selected in the dropdown, within scope" do
|
381
|
+
["Short", "Average", "Tall"].each do |height|
|
382
|
+
@st.select_from_dropdown(height, "Height", :within => "spouse_form")
|
383
|
+
@st.dropdown_equals("Height", height, :within => "spouse_form").should be_true
|
384
|
+
end
|
385
|
+
end
|
346
386
|
|
347
|
-
|
348
|
-
@st.
|
387
|
+
it "option is selected in the dropdown, in table row" do
|
388
|
+
@st.visit("/table")
|
389
|
+
["Male", "Female"].each do |gender|
|
390
|
+
@st.select_from_dropdown(gender, "Gender", :in_row => "Eric")
|
391
|
+
@st.dropdown_equals("Gender", gender, :in_row => "Eric")
|
392
|
+
end
|
349
393
|
end
|
350
394
|
end
|
351
395
|
|
352
396
|
context "fails when" do
|
397
|
+
it "no such dropdown exists" do
|
398
|
+
@st.dropdown_equals("Eggs", "Over easy").should be_false
|
399
|
+
end
|
400
|
+
|
353
401
|
it "dropdown exists, but the option is not selected" do
|
354
402
|
@st.select_from_dropdown("Short", "Height")
|
355
403
|
@st.dropdown_equals("Height", "Average").should be_false
|
@@ -364,8 +412,17 @@ describe Rsel::SeleniumTest do
|
|
364
412
|
@st.dropdown_equals("Height", "Average").should be_false
|
365
413
|
end
|
366
414
|
|
367
|
-
it "
|
368
|
-
@st.
|
415
|
+
it "dropdown exists, and option is selected, but not in scope" do
|
416
|
+
@st.select_from_dropdown("Tall", "Height", :within => "person_form")
|
417
|
+
@st.select_from_dropdown("Short", "Height", :within => "spouse_form")
|
418
|
+
@st.dropdown_equals("Height", "Tall", :within => "spouse_form").should be_false
|
419
|
+
end
|
420
|
+
|
421
|
+
it "dropdown exists, and option is selected, but not in table row" do
|
422
|
+
@st.visit("/table")
|
423
|
+
@st.select_from_dropdown("Female", "Gender", :in_row => "Eric")
|
424
|
+
@st.select_from_dropdown("Male", "Gender", :in_row => "Marcus")
|
425
|
+
@st.dropdown_equals("Gender", "Female", :in_row => "Marcus").should be_false
|
369
426
|
end
|
370
427
|
end
|
371
428
|
end
|
@@ -604,13 +661,26 @@ describe Rsel::SeleniumTest do
|
|
604
661
|
end
|
605
662
|
|
606
663
|
it "field exists, but not within scope" do
|
607
|
-
@st.type_into_field("Long story", "Life story",
|
664
|
+
@st.type_into_field("Long story", "Life story",
|
665
|
+
:within => 'spouse_form').should be_false
|
608
666
|
end
|
609
667
|
end
|
610
668
|
end
|
611
669
|
|
612
670
|
describe "#field_contains" do
|
613
671
|
context "passes when" do
|
672
|
+
context "text field with label" do
|
673
|
+
it "equals the text" do
|
674
|
+
@st.fill_in_with("First name", "Marcus")
|
675
|
+
@st.field_contains("First name", "Marcus").should be_true
|
676
|
+
end
|
677
|
+
|
678
|
+
it "contains the text" do
|
679
|
+
@st.fill_in_with("First name", "Marcus")
|
680
|
+
@st.field_contains("First name", "Marc").should be_true
|
681
|
+
end
|
682
|
+
end
|
683
|
+
|
614
684
|
context "textarea with label" do
|
615
685
|
it "contains the text" do
|
616
686
|
@st.fill_in_with("Life story", "Blah dee blah")
|
@@ -620,6 +690,13 @@ describe Rsel::SeleniumTest do
|
|
620
690
|
end
|
621
691
|
|
622
692
|
context "fails when" do
|
693
|
+
context "text field with label" do
|
694
|
+
it "does not contain the text" do
|
695
|
+
@st.fill_in_with("First name", "Marcus")
|
696
|
+
@st.field_contains("First name", "Eric").should be_false
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
623
700
|
context "textarea with label" do
|
624
701
|
it "does not contain the text" do
|
625
702
|
@st.fill_in_with("Life story", "Blah dee blah")
|
@@ -632,7 +709,15 @@ describe Rsel::SeleniumTest do
|
|
632
709
|
describe "#field_equals" do
|
633
710
|
context "passes when" do
|
634
711
|
context "text field with label" do
|
635
|
-
|
712
|
+
it "equals the text" do
|
713
|
+
@st.fill_in_with("First name", "Ken")
|
714
|
+
@st.field_equals("First name", "Ken").should be_true
|
715
|
+
end
|
716
|
+
|
717
|
+
it "equals the text, and is within scope" do
|
718
|
+
@st.fill_in_with("First name", "Eric", :within => "person_form")
|
719
|
+
@st.field_equals("First name", "Eric", :within => "person_form")
|
720
|
+
end
|
636
721
|
end
|
637
722
|
|
638
723
|
context "textarea with label" do
|
@@ -642,7 +727,10 @@ describe Rsel::SeleniumTest do
|
|
642
727
|
end
|
643
728
|
|
644
729
|
it "equals the text, and is within scope" do
|
645
|
-
|
730
|
+
@st.fill_in_with("Life story", "Blah dee blah",
|
731
|
+
:within => "person_form")
|
732
|
+
@st.field_equals("Life story", "Blah dee blah",
|
733
|
+
:within => "person_form").should be_true
|
646
734
|
end
|
647
735
|
|
648
736
|
it "equals the text, and is in table row" do
|
@@ -653,7 +741,10 @@ describe Rsel::SeleniumTest do
|
|
653
741
|
|
654
742
|
context "fails when" do
|
655
743
|
context "text field with label" do
|
656
|
-
|
744
|
+
it "does not exactly equal the text" do
|
745
|
+
@st.fill_in_with("First name", "Marcus")
|
746
|
+
@st.field_equals("First name", "Marc").should be_false
|
747
|
+
end
|
657
748
|
end
|
658
749
|
|
659
750
|
context "textarea with label" do
|
data/spec/spec_helper.rb
CHANGED
@@ -6,16 +6,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test', 'app'))
|
|
6
6
|
|
7
7
|
RSpec.configure do |config|
|
8
8
|
config.include Rsel
|
9
|
-
|
10
|
-
config.before(:all) do
|
11
|
-
@st = Rsel::SeleniumTest.new('http://localhost:8070/')
|
12
|
-
@st.open_browser
|
13
|
-
end
|
14
|
-
|
15
|
-
config.after(:all) do
|
16
|
-
@st.close_browser
|
17
|
-
end
|
18
|
-
|
9
|
+
config.include Rsel::Support
|
19
10
|
end
|
20
11
|
|
21
12
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
|
+
|
3
|
+
describe Rsel::Support do
|
4
|
+
describe "#loc" do
|
5
|
+
it "returns Selenium-style locators unchanged" do
|
6
|
+
locators = [
|
7
|
+
"id=foo_bar",
|
8
|
+
"name=foo_bar",
|
9
|
+
"xpath=//input[@id='foo_bar']",
|
10
|
+
"css=div#foo_bar",
|
11
|
+
]
|
12
|
+
locators.each do |locator|
|
13
|
+
loc(locator).should == locator
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns Rsel-style locators as Selenium xpaths" do
|
18
|
+
locators = [
|
19
|
+
"First name",
|
20
|
+
"first_name",
|
21
|
+
]
|
22
|
+
locators.each do |locator|
|
23
|
+
loc(locator, 'field').should =~ /^xpath=/
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "requires a non-empty locator" do
|
28
|
+
lambda do
|
29
|
+
loc('')
|
30
|
+
end.should raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it "requires element kind for Rsel-style locators" do
|
34
|
+
lambda do
|
35
|
+
loc('foo')
|
36
|
+
end.should raise_error
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#xpath" do
|
41
|
+
it "requires a valid kind" do
|
42
|
+
lambda do
|
43
|
+
xpath('junk', 'hello')
|
44
|
+
end.should raise_error
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
data/test/app.rb
CHANGED
@@ -14,12 +14,12 @@ class TestApp < Sinatra::Base
|
|
14
14
|
end
|
15
15
|
|
16
16
|
get '/:view' do |view|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
# Allow shutting down the app with a request
|
18
|
+
if view == 'shutdown'
|
19
|
+
Process.kill('KILL', Process.pid)
|
20
|
+
else
|
21
|
+
erb view.to_sym
|
22
|
+
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Marcus French
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-07-
|
20
|
+
date: 2011-07-31 00:00:00 -06:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -155,18 +155,22 @@ files:
|
|
155
155
|
- Rakefile
|
156
156
|
- docs/custom.md
|
157
157
|
- docs/development.md
|
158
|
+
- docs/examples.md
|
158
159
|
- docs/history.md
|
159
160
|
- docs/index.md
|
160
161
|
- docs/install.md
|
162
|
+
- docs/locators.md
|
161
163
|
- docs/scoping.md
|
162
164
|
- docs/todo.md
|
163
165
|
- docs/usage.md
|
164
166
|
- lib/rsel.rb
|
165
167
|
- lib/rsel/exceptions.rb
|
166
168
|
- lib/rsel/selenium_test.rb
|
169
|
+
- lib/rsel/support.rb
|
167
170
|
- rsel.gemspec
|
168
171
|
- spec/selenium_test_spec.rb
|
169
172
|
- spec/spec_helper.rb
|
173
|
+
- spec/support_spec.rb
|
170
174
|
- test/app.rb
|
171
175
|
- test/config.ru
|
172
176
|
- test/views/about.erb
|
@@ -177,41 +181,6 @@ files:
|
|
177
181
|
- test/views/index.erb
|
178
182
|
- test/views/table.erb
|
179
183
|
- test/views/thanks.erb
|
180
|
-
- vendor/rubyslim-0.1.1/.gitignore
|
181
|
-
- vendor/rubyslim-0.1.1/README.md
|
182
|
-
- vendor/rubyslim-0.1.1/Rakefile
|
183
|
-
- vendor/rubyslim-0.1.1/bin/rubyslim
|
184
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/list_deserializer.rb
|
185
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/list_executor.rb
|
186
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/list_serializer.rb
|
187
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/ruby_slim.rb
|
188
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/slim_error.rb
|
189
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/slim_helper_library.rb
|
190
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/socket_service.rb
|
191
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/statement.rb
|
192
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/statement_executor.rb
|
193
|
-
- vendor/rubyslim-0.1.1/lib/rubyslim/table_to_hash_converter.rb
|
194
|
-
- vendor/rubyslim-0.1.1/lib/test_module/library_new.rb
|
195
|
-
- vendor/rubyslim-0.1.1/lib/test_module/library_old.rb
|
196
|
-
- vendor/rubyslim-0.1.1/lib/test_module/should_not_find_test_slim_in_here/test_slim.rb
|
197
|
-
- vendor/rubyslim-0.1.1/lib/test_module/simple_script.rb
|
198
|
-
- vendor/rubyslim-0.1.1/lib/test_module/test_chain.rb
|
199
|
-
- vendor/rubyslim-0.1.1/lib/test_module/test_slim.rb
|
200
|
-
- vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_arguments.rb
|
201
|
-
- vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_no_sut.rb
|
202
|
-
- vendor/rubyslim-0.1.1/rubyslim.gemspec
|
203
|
-
- vendor/rubyslim-0.1.1/spec/instance_creation_spec.rb
|
204
|
-
- vendor/rubyslim-0.1.1/spec/it8f_spec.rb
|
205
|
-
- vendor/rubyslim-0.1.1/spec/list_deserializer_spec.rb
|
206
|
-
- vendor/rubyslim-0.1.1/spec/list_executor_spec.rb
|
207
|
-
- vendor/rubyslim-0.1.1/spec/list_serialzer_spec.rb
|
208
|
-
- vendor/rubyslim-0.1.1/spec/method_invocation_spec.rb
|
209
|
-
- vendor/rubyslim-0.1.1/spec/slim_helper_library_spec.rb
|
210
|
-
- vendor/rubyslim-0.1.1/spec/socket_service_spec.rb
|
211
|
-
- vendor/rubyslim-0.1.1/spec/spec_helper.rb
|
212
|
-
- vendor/rubyslim-0.1.1/spec/statement_executor_spec.rb
|
213
|
-
- vendor/rubyslim-0.1.1/spec/statement_spec.rb
|
214
|
-
- vendor/rubyslim-0.1.1/spec/table_to_hash_converter_spec.rb
|
215
184
|
has_rdoc: true
|
216
185
|
homepage: http://github.com/a-e/rsel
|
217
186
|
licenses: []
|