locator 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'nokogiri'
3
-
4
- class NokogiriTest < Test::Unit::TestCase
5
- include Locator
6
-
7
- # test "Element takes a Nokogiri dom" do
8
- # dom = Nokogiri::HTML::Document.parse('<a href="#">the link</a>')
9
- # assert Element.new.locate(dom, 'the link')
10
- # end
11
-
12
- test "Element takes a Nokogiri page adapter" do
13
- dom = Locator::Dom::Nokogiri::Page.new('<a href="#">the link</a>')
14
- assert Element.new.locate(dom, 'the link')
15
- end
16
-
17
- # test "Nokogiri and Umlauts" do
18
- # encoded = '<p>&ouml;</p>'
19
- # unencoded = '<p>ö</p>'
20
- #
21
- # # this is ok
22
- # fragment = Nokogiri::HTML.fragment(encoded)
23
- # assert_equal encoded, fragment.to_s
24
- #
25
- # # this seems weird ... wtf experiences ahead
26
- # fragment = Nokogiri::HTML.fragment(unencoded)
27
- # assert_equal encoded, fragment.to_s
28
- #
29
- # options =
30
- # Nokogiri::XML::ParseOptions::RECOVER |
31
- # Nokogiri::XML::ParseOptions::NOERROR |
32
- # Nokogiri::XML::ParseOptions::NOWARNING
33
- #
34
- # # this is ok
35
- # node = Nokogiri::HTML.parse(encoded, nil, nil, options)
36
- # assert_equal encoded, node.xpath('//p').first.to_s
37
- #
38
- # # this is ok
39
- # node = Nokogiri::HTML.parse(unencoded, nil, 'utf-8', options)
40
- # assert_equal unencoded, node.xpath('//p').first.to_s
41
- # end
42
- end
@@ -1,31 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'locator/element'
3
-
4
- class ElementButtonTest < Test::Unit::TestCase
5
- Button = Locator::Element::Button
6
-
7
- test "finds a button" do
8
- html = '<button></button>'
9
- assert_equal 'button', Button.new.locate(html).name
10
- end
11
-
12
- test "finds a submit input" do
13
- html = '<input type="submit">'
14
- assert_equal 'input', Button.new.locate(html).name
15
- end
16
-
17
- test "finds a button input" do
18
- html = '<input type="button">'
19
- assert_equal 'input', Button.new.locate(html).name
20
- end
21
-
22
- test "finds an image input" do
23
- html = '<input type="image">'
24
- assert_equal 'input', Button.new.locate(html).name
25
- end
26
-
27
- test "does not find a checkbox input" do
28
- html = '<input type="checkbox">'
29
- assert_nil Button.new.locate(html)
30
- end
31
- end
@@ -1,71 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'locator/element'
3
-
4
- class ElementFieldTest < Test::Unit::TestCase
5
- Field = Locator::Element::Field
6
-
7
- test "finds a textarea" do
8
- html = '<textarea></textarea>'
9
- assert_equal 'textarea', Field.new.locate(html).name
10
- end
11
-
12
- test "finds a text input" do
13
- html = '<input type="text">'
14
- assert_equal 'input', Field.new.locate(html).name
15
- end
16
-
17
- test "finds a password input" do
18
- html = '<input type="password">'
19
- assert_equal 'input', Field.new.locate(html).name
20
- end
21
-
22
- test "finds an email input" do
23
- html = '<input type="email">'
24
- assert_equal 'input', Field.new.locate(html).name
25
- end
26
-
27
- test "finds a url input" do
28
- html = '<input type="url">'
29
- assert_equal 'input', Field.new.locate(html).name
30
- end
31
-
32
- test "finds a search input" do
33
- html = '<input type="search">'
34
- assert_equal 'input', Field.new.locate(html).name
35
- end
36
-
37
- test "finds a tel input" do
38
- html = '<input type="tel">'
39
- assert_equal 'input', Field.new.locate(html).name
40
- end
41
-
42
- test "finds a color input" do
43
- html = '<input type="color">'
44
- assert_equal 'input', Field.new.locate(html).name
45
- end
46
-
47
- test "finds a text input by name" do
48
- html = '<input type="text" name="foo">'
49
- assert_equal 'input', Field.new.locate(html, 'foo').name
50
- end
51
-
52
- test "finds a text input by class attribute" do
53
- html = '<input type="text" class="foo">'
54
- assert_equal 'input', Field.new.locate(html, :class => 'foo').name
55
- end
56
-
57
- test "finds an input by label content" do
58
- html = '<label for="bar">foo</label><input type="text" id="bar">'
59
- assert_equal 'input', Field.new.locate(html, 'foo').name
60
- end
61
-
62
- test "finds an input by label content and input class" do
63
- html = '<label for="bar">foo</label><input type="text" id="bar" class="baz">'
64
- assert_equal 'input', Field.new.locate(html, 'foo', :class => 'baz').name
65
- end
66
-
67
- test "does not find a checkbox input" do
68
- html = '<input type="checkbox">'
69
- assert_nil Field.new.locate(html)
70
- end
71
- end
@@ -1,36 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'locator/element'
3
-
4
- class ElementFormTest < Test::Unit::TestCase
5
- Form = Locator::Element::Form
6
-
7
- test "finds a form" do
8
- html = '<form></form>'
9
- assert_equal 'form', Form.new.locate(html).name
10
- end
11
-
12
- test "finds a form by id" do
13
- html = '<form id="foo"></form>'
14
- assert_equal 'form', Form.new.locate(html, 'foo').name
15
- end
16
-
17
- test "finds a form by name" do
18
- html = '<form name="foo"></form>'
19
- assert_equal 'form', Form.new.locate(html, 'foo').name
20
- end
21
-
22
- test "finds a form by class" do
23
- html = '<form class="foo"></form>'
24
- assert_equal 'form', Form.new.locate(html, :class => 'foo').name
25
- end
26
-
27
- test "does not find a form when id does not match" do
28
- html = '<form id="bar"></form>'
29
- assert_nil Form.new.locate(html, :class => 'foo')
30
- end
31
-
32
- test "does not find a form when class does not match" do
33
- html = '<form class="bar"></form>'
34
- assert_nil Form.new.locate(html, :class => 'foo')
35
- end
36
- end
@@ -1,36 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'locator/element'
3
-
4
- class ElementHiddenFieldTest < Test::Unit::TestCase
5
- HiddenField = Locator::Element::HiddenField
6
-
7
- test "finds a hidden input" do
8
- html = '<input type="hidden" />'
9
- assert_equal 'input', HiddenField.new.locate(html).name
10
- end
11
-
12
- test "finds a hidden input by id" do
13
- html = '<input type="hidden" id="foo" />'
14
- assert_equal 'input', HiddenField.new.locate(html, 'foo').name
15
- end
16
-
17
- test "finds a hidden input by name" do
18
- html = '<input type="hidden" name="foo" />'
19
- assert_equal 'input', HiddenField.new.locate(html, 'foo').name
20
- end
21
-
22
- test "finds a hidden input by class" do
23
- html = '<input type="hidden" class="foo" />'
24
- assert_equal 'input', HiddenField.new.locate(html, :class => 'foo').name
25
- end
26
-
27
- test "does not find a hidden input when id does not match" do
28
- html = '<input type="hidden" id="bar" />'
29
- assert_nil HiddenField.new.locate(html, :class => 'foo')
30
- end
31
-
32
- test "does not find a hidden input when class does not match" do
33
- html = '<input type="hidden" class="bar" />'
34
- assert_nil HiddenField.new.locate(html, :class => 'foo')
35
- end
36
- end
@@ -1,30 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- class ElementLabelTest < Test::Unit::TestCase
4
- Label = Locator::Element::Label
5
-
6
- test "finds a label" do
7
- html = '<label></label>'
8
- assert_equal 'label', Label.new.locate(html).name
9
- end
10
-
11
- test "finds a label by id" do
12
- html = '<label id="foo"></label>'
13
- assert_equal 'label', Label.new.locate(html, 'foo').name
14
- end
15
-
16
- test "finds a label by class" do
17
- html = '<label class="foo"></label>'
18
- assert_equal 'label', Label.new.locate(html, :class => 'foo').name
19
- end
20
-
21
- test "does not find a label when id does not match" do
22
- html = '<label id="bar"></label>'
23
- assert_nil Label.new.locate(html, :class => 'foo')
24
- end
25
-
26
- test "does not find a label when class does not match" do
27
- html = '<label class="bar"></label>'
28
- assert_nil Label.new.locate(html, :class => 'foo')
29
- end
30
- end
@@ -1,36 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- class LocatorElementLinkTest < Test::Unit::TestCase
4
- Link = Locator::Element::Link
5
-
6
- test "finds a link" do
7
- html = '<a class="foo"></a><a href="" class="bar"></a>'
8
- assert_equal 'bar', Link.new.locate(html).attribute('class')
9
- end
10
-
11
- test "finds a link by id" do
12
- html = '<a href="" id="foo"></a><a href="" id="bar"></a>'
13
- assert_equal 'bar', Link.new.locate(html, :id => 'bar').attribute('id')
14
- end
15
-
16
- test "finds a link by class" do
17
- html = '<a href="" class="foo"></a><a href="" class="bar"></a>'
18
- assert_equal 'bar', Link.new.locate(html, :class => 'bar').attribute('class')
19
- end
20
-
21
- test "finds a link by content" do
22
- html = '<a href="">foo</a><a href="">bar</a>'
23
- assert_equal 'bar', Link.new.locate(html, 'bar').content
24
- end
25
-
26
- test "does not find an anchor" do
27
- html =
28
- assert_nil Link.new.locate('<a name="">foo</a>')
29
- end
30
-
31
- test "finds a link with a href starting with a slash" do
32
- html = '<a href="/foo/bar" class="foo"></a><a href="" class="bar"></a>'
33
- assert_equal '/foo/bar', Link.new.locate(html, :href => '/foo/bar').attribute('href')
34
- end
35
- end
36
-
@@ -1,41 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'locator/element'
3
-
4
- class ElementSelectOptionOptionTest < Test::Unit::TestCase
5
- SelectOption = Locator::Element::SelectOption
6
-
7
- test "finds an option" do
8
- html = '<option></option>'
9
- assert_equal 'option', SelectOption.new.locate(html).name
10
- end
11
-
12
- test "finds an option by id" do
13
- html = '<option id="foo"></option>'
14
- assert_equal 'option', SelectOption.new.locate(html, 'foo').name
15
- end
16
-
17
- test "finds an option by value" do
18
- html = '<option value="foo"></option>'
19
- assert_equal 'option', SelectOption.new.locate(html, 'foo').name
20
- end
21
-
22
- test "finds an option by content" do
23
- html = '<option>foo</option>'
24
- assert_equal 'option', SelectOption.new.locate(html, 'foo').name
25
- end
26
-
27
- test "finds an option by class attribute" do
28
- html = '<option class="foo"></option>'
29
- assert_equal 'option', SelectOption.new.locate(html, :class => 'foo').name
30
- end
31
-
32
- test "does not find an option when id does not match" do
33
- html = '<option id="bar"></option>'
34
- assert_nil SelectOption.new.locate(html, :class => 'foo')
35
- end
36
-
37
- test "does not find an option when class does not match" do
38
- html = '<option class="bar"></option>'
39
- assert_nil SelectOption.new.locate(html, :class => 'foo')
40
- end
41
- end
@@ -1,30 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- class ElementSelectTest < Test::Unit::TestCase
4
- Select = Locator::Element::Select
5
-
6
- test "finds a select" do
7
- html = '<select id="foo" class="foo"></select><select id="bar" class="bar"></select>'
8
- assert_equal 'select', Select.new.locate(html).name
9
- end
10
-
11
- test "finds a select by id" do
12
- html = '<select id="foo"></select>'
13
- assert_equal 'select', Select.new.locate(html, 'foo').name
14
- end
15
-
16
- test "finds a select by class" do
17
- html = '<select class="foo"></select>'
18
- assert_equal 'select', Select.new.locate(html, :class => 'foo').name
19
- end
20
-
21
- test "does not find a select when id does not match" do
22
- html = '<select id="bar"></select>'
23
- assert_nil Select.new.locate(html, :class => 'foo')
24
- end
25
-
26
- test "does not find a select when class does not match" do
27
- html = '<select class="bar"></select>'
28
- assert_nil Select.new.locate(html, :class => 'foo')
29
- end
30
- end
@@ -1,31 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
- require 'locator/element'
3
-
4
- class ElementTextAreaTest < Test::Unit::TestCase
5
- TextArea = Locator::Element::TextArea
6
-
7
- test "finds a textarea" do
8
- html = '<textarea></textarea>'
9
- assert_equal 'textarea', TextArea.new.locate(html).name
10
- end
11
-
12
- test "finds a textarea by id" do
13
- html = '<textarea id="foo"></textarea>'
14
- assert_equal 'textarea', TextArea.new.locate(html, 'foo').name
15
- end
16
-
17
- test "finds a textarea by class" do
18
- html = '<textarea class="foo"></textarea>'
19
- assert_equal 'textarea', TextArea.new.locate(html, :class => 'foo').name
20
- end
21
-
22
- test "does not find a textarea when id does not match" do
23
- html = '<textarea id="bar"></textarea>'
24
- assert_nil TextArea.new.locate(html, :class => 'foo')
25
- end
26
-
27
- test "does not find a textarea when class does not match" do
28
- html = '<textarea class="bar"></textarea>'
29
- assert_nil TextArea.new.locate(html, :class => 'foo')
30
- end
31
- end
@@ -1,136 +0,0 @@
1
- # encoding: utf-8
2
- require File.expand_path('../../test_helper', __FILE__)
3
-
4
- class LocatorElementTest < Test::Unit::TestCase
5
- include Locator
6
-
7
- # xpath
8
-
9
- test "xpath without further arguments given" do
10
- assert_equal './/*', Element.new.xpath
11
- end
12
-
13
- test "xpath of an element with a node name" do
14
- xpath = Element.new(:div).xpath
15
- assert_equal './/div', xpath
16
- end
17
-
18
- test "xpath of an element with attributes" do
19
- xpath = Element.new(nil, :type => 'type', :class => 'class').xpath
20
- assert_equal ".//*[@type=\"type\"][contains(concat(' ', @class, ' '), concat(' ', \"class\", ' '))]", xpath
21
- end
22
-
23
- test "xpath of an element with node name and attributes" do
24
- xpath = Element.new(:div, :type => 'type', :class => 'class').xpath
25
- assert_equal ".//div[@type=\"type\"][contains(concat(' ', @class, ' '), concat(' ', \"class\", ' '))]", xpath
26
- end
27
-
28
- test "xpath of an element with multiple node name and attributes" do
29
- xpath = Element.new([:div, :p], :type => 'type').xpath
30
- assert_equal ".//div[@type=\"type\"] | .//p[@type=\"type\"]", xpath
31
- end
32
-
33
- test "xpath merges given attributes with element attributes" do
34
- xpath = Element.new(:div, :foo => 'foo').xpath(:bar => 'bar')
35
- assert xpath.include?(".//div")
36
- assert xpath.include?("[@foo=\"foo\"]") # humpf, unsorted hash
37
- assert xpath.include?("[@bar=\"bar\"]")
38
- end
39
-
40
- test "xpath with given xpath and attributes" do
41
- xpath = Element.new.xpath('.//div', :foo => 'foo')
42
- assert_equal ".//div[@foo=\"foo\"]", xpath
43
- end
44
-
45
- # all
46
-
47
- test "all selects all elements when given no attributes" do
48
- html = '<a class="foo"></a><p class="bar"></p>'
49
- elements = Element.new.all(html)
50
- assert_equal %w(html body a p), elements.map { |element| element.name }
51
- end
52
-
53
- test "all selects all nodes with given node name" do
54
- html = '<a class="foo"></a><p class="bar"></p>'
55
- elements = Element.new('a').all(html)
56
- assert_equal %w(a), elements.map { |element| element.name }
57
- end
58
-
59
- test "all selects all nodes with attribute given to initialize" do
60
- html = '<a class="foo"></a><p class="bar"></p>'
61
- elements = Element.new(:class => 'foo').all(html)
62
- assert_equal %w(a), elements.map { |element| element.name }
63
- end
64
-
65
- test "all selects all nodes with attribute given to all" do
66
- html = '<a class="foo"></a><p class="bar"></p>'
67
- elements = Element.new.all(html, :class => 'foo')
68
- assert_equal %w(a), elements.map { |element| element.name }
69
- end
70
-
71
- # locate
72
-
73
- test "locate selects an element based on the length of the matching value" do
74
- html = %(
75
- <a href="#">the link with extra text</a>
76
- <a href="http://www.some-very-long-url.com">the link ...</a>
77
- )
78
- element = Element.new.locate(html, 'the link')
79
- assert_equal 'the link ...', element.content
80
- end
81
-
82
- test "locate selects an element containing whitespace" do
83
- html = %(
84
- <a href="#">
85
- the
86
- link
87
- </a>
88
- )
89
- assert Element.new.locate(html, 'the link')
90
- end
91
-
92
- test "locate selects an element containing extra tags" do
93
- html = '<a href="#">the <span>link</span></a>'
94
- assert Element.new.locate(html, 'the link')
95
- end
96
-
97
- test "locate selects an element containing extra text (1)" do
98
- html = '<a href="#">the link &raquo;</label>'
99
- assert Element.new.locate(html, 'the link')
100
- end
101
-
102
- test "locate selects an element containing extra text (2)" do
103
- html = '<a href="#">(the link)</label>'
104
- assert Element.new.locate(html, 'the link')
105
- end
106
-
107
- test "does not find a link when id does not match" do
108
- html = '<a href="" id="bar"></a>'
109
- assert_nil Element.new.locate(html, :id => 'foo')
110
- end
111
-
112
- test "does not find a link when class does not match" do
113
- html = '<a href="" class="bar"></a>'
114
- assert_nil Element.new.locate(html, :class => 'foo')
115
- end
116
-
117
- test "locate using an xpath" do
118
- html = '<a class="foo" href="#"></a><a class="bar" href="#"></a>'
119
- assert_equal 'bar', Element::Link.new.locate(html, :xpath => '//a[@class="bar"]').attribute('class')
120
- end
121
-
122
- test "locate using a css selector" do
123
- html = '<a class="foo" href="#"></a><a class="bar" href="#"></a>'
124
- assert_equal 'bar', Element::Link.new.locate(html, :css => '.bar').attribute('class')
125
- end
126
-
127
- test "locate selects an element containing an umlaut" do
128
- html = '<a href="#">the lünk</a>'
129
- assert Element.new.locate(html, 'the lünk')
130
- end
131
-
132
- test "locate selects an element with an attribute containing an umlaut" do
133
- html = '<input type="text" value="München" />'
134
- assert Element.new.locate(html, :value => 'München')
135
- end
136
- end