druid-ts 1.1.4 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +27 -0
- data/cucumber.yml +6 -2
- data/features/area.feature +33 -0
- data/features/audio.feature +66 -0
- data/features/canvas.feature +35 -0
- data/features/element.feature +9 -0
- data/features/html/hover.html +11 -0
- data/features/html/planets.gif +0 -0
- data/features/html/static_elements.html +43 -0
- data/features/html/sun.gif +0 -0
- data/features/html/sun.html +7 -0
- data/features/list_item.feature +1 -0
- data/features/page_level_actions.feature +25 -0
- data/features/sample-app/public/04-Death_Becomes_Fur.mp4 +0 -0
- data/features/sample-app/public/04-Death_Becomes_Fur.oga +0 -0
- data/features/sample-app/public/movie.mp4 +0 -0
- data/features/sample-app/public/movie.ogg +0 -0
- data/features/select_list.feature +5 -1
- data/features/step_definations/area_steps.rb +23 -0
- data/features/step_definations/audio_steps.rb +31 -0
- data/features/step_definations/canvas_steps.rb +19 -0
- data/features/step_definations/element_steps.rb +23 -2
- data/features/step_definations/page_level_actions_steps.rb +35 -0
- data/features/step_definations/select_list_steps.rb +4 -0
- data/features/step_definations/table_steps.rb +4 -0
- data/features/step_definations/video_steps.rb +19 -0
- data/features/support/page.rb +38 -2
- data/features/support/persistent_browser.rb +2 -1
- data/features/support/url_helper.rb +4 -0
- data/features/table.feature +8 -0
- data/features/video.feature +59 -0
- data/lib/druid/accessors.rb +162 -26
- data/lib/druid/assist.rb +63 -0
- data/lib/druid/element_locators.rb +126 -0
- data/lib/druid/elements.rb +29 -24
- data/lib/druid/elements/area.rb +29 -0
- data/lib/druid/elements/audio.rb +9 -0
- data/lib/druid/elements/canvas.rb +22 -0
- data/lib/druid/elements/element.rb +15 -1
- data/lib/druid/elements/list_item.rb +4 -0
- data/lib/druid/elements/media.rb +45 -0
- data/lib/druid/elements/select_list.rb +7 -1
- data/lib/druid/elements/table_row.rb +1 -0
- data/lib/druid/elements/video.rb +17 -0
- data/lib/druid/nested_elements.rb +32 -0
- data/lib/druid/version.rb +1 -1
- data/spec/druid/accessors_spec.rb +77 -0
- data/spec/druid/element_locators_spec.rb +89 -0
- data/spec/druid/elements/area_spec.rb +33 -0
- data/spec/druid/elements/canvas_spec.rb +28 -0
- data/spec/druid/elements/list_item_spec.rb +1 -1
- data/spec/druid/elements/select_list_spec.rb +6 -0
- metadata +42 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27a03ffe5425a835025a1c02f08ef841cbd92c8e
|
4
|
+
data.tar.gz: 170750f300df8637c4f852a5cca633c807cda376
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 275f0bb2a55c1c8be2cc5b65caf00f2e979b9ce35fd32037ab843e6466226c08112faaed5c46028994d1021846ca842d5510ece3a30734977fdaf4ef419e1c65
|
7
|
+
data.tar.gz: 32f20dcb1f4c488119a9b7ea3fc0f4714c58b91064d967a748c05adcb3134266595d0a0a8104f7f97f320e9a2f9139ea463358655411fef03b8acc6215c2685a
|
data/ChangeLog
CHANGED
@@ -1,7 +1,34 @@
|
|
1
|
+
=== 2017-01-03
|
2
|
+
* Enhancement
|
3
|
+
* Added selected_values method to SelectList to get values of all selected elements
|
4
|
+
=== Version v1.1.5/ 2016-12-31
|
5
|
+
* Enhancement
|
6
|
+
* Added method to get the id of an Element
|
7
|
+
=== 2016-12-30
|
8
|
+
* Enhancement
|
9
|
+
* Added hover method to Element. Browser support is limited
|
1
10
|
=== 2016-12-28
|
2
11
|
* Enhancement
|
3
12
|
* Updated Table [] method to return a row that has matching partial text in any column
|
4
13
|
* Updated TableRow [] method to return column that matching partial text in any column
|
14
|
+
* Added the following aliased methods to their corresponding Accessors method
|
15
|
+
a => link
|
16
|
+
hidden => hidden_field
|
17
|
+
img => image
|
18
|
+
li => list_item
|
19
|
+
ol => ordered_list
|
20
|
+
p => paragraph
|
21
|
+
radio => radio_button
|
22
|
+
select => select_list
|
23
|
+
td => cell
|
24
|
+
textarea => text_area
|
25
|
+
ul => unordered_list
|
26
|
+
* Added support for the following new elements
|
27
|
+
Area
|
28
|
+
Canvas
|
29
|
+
Audio
|
30
|
+
Video
|
31
|
+
* Added ability to find list_item by :text
|
5
32
|
===Version v1.1.4/ 2016-12-27
|
6
33
|
* Enhancement
|
7
34
|
* Added ability to find span's by title
|
data/cucumber.yml
CHANGED
@@ -1,2 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<%
|
2
|
+
std_opts = "BROWSER=firefox --no-source --color --format pretty"
|
3
|
+
%>
|
4
|
+
|
5
|
+
default: DRIVER=WATIR <%= std_opts %>
|
6
|
+
watir: DRIVER=WATIR <%= std_opts %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
Feature: Area
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Retrieve an area element
|
7
|
+
When I retrieve the area element
|
8
|
+
Then I should know it exists
|
9
|
+
And I should know it is visible
|
10
|
+
|
11
|
+
Scenario Outline: Locating areas on the page
|
12
|
+
When I search for the area by "<search_by>"
|
13
|
+
Then I should be able to click the area
|
14
|
+
|
15
|
+
Examples:
|
16
|
+
| search_by |
|
17
|
+
| id |
|
18
|
+
| class |
|
19
|
+
| name |
|
20
|
+
| xpath |
|
21
|
+
| index |
|
22
|
+
|
23
|
+
Scenario: Getting the coordinates for the area
|
24
|
+
When I retrieve the area element
|
25
|
+
Then I should see the coordinates are "0,0,82,126"
|
26
|
+
|
27
|
+
Scenario: Getting the shape for the area
|
28
|
+
When I retrieve the area element
|
29
|
+
Then I should see the shape are "rect"
|
30
|
+
|
31
|
+
Scenario: Getting the href from the area
|
32
|
+
When I retrieve the area element
|
33
|
+
Then I should see the href is "sun.html"
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#Feature: Support for the audio element
|
2
|
+
|
3
|
+
#Background:
|
4
|
+
#Given I am on the static elements page
|
5
|
+
|
6
|
+
#Scenario: Finding an audio element
|
7
|
+
#When I retrieve the audio element
|
8
|
+
#Then I should know it exists
|
9
|
+
#And I should know it is visible
|
10
|
+
|
11
|
+
#Scenario Outline: Locating an audio element on the page
|
12
|
+
#When I search for the audio element by "<search_by>"
|
13
|
+
#Then I should know it is visible
|
14
|
+
|
15
|
+
#Examples:
|
16
|
+
#| search_by |
|
17
|
+
#| id |
|
18
|
+
#| class |
|
19
|
+
#| name |
|
20
|
+
#| xpath |
|
21
|
+
#| index |
|
22
|
+
|
23
|
+
#Scenario Outline: Locating audios using multiple parameters
|
24
|
+
#When I search for the audio element by "<param1>" and "<param2>"
|
25
|
+
#Then I should know it is visible
|
26
|
+
|
27
|
+
#Examples:
|
28
|
+
#| param1 | param2 |
|
29
|
+
#| class | index |
|
30
|
+
#| name | index |
|
31
|
+
|
32
|
+
#Scenario: Should know if it is autoplay
|
33
|
+
#When I retrieve the audio element
|
34
|
+
#Then I should know the audio is not autoplay
|
35
|
+
|
36
|
+
#Scenario: Should know if the controls are displayed
|
37
|
+
#When I retrieve the audio element
|
38
|
+
#Then I should know that the controls are displayed
|
39
|
+
|
40
|
+
#Scenario: Should know if it is paused
|
41
|
+
#When I retrieve the audio element
|
42
|
+
#Then I should know that the audio is paused
|
43
|
+
|
44
|
+
#Scenario: Should know its duration
|
45
|
+
#When I retrieve the audio element
|
46
|
+
#Then I should know that the duration is greater than 74 seconds
|
47
|
+
|
48
|
+
#Scenario: Should know its volume
|
49
|
+
#When I retrieve the audio element
|
50
|
+
#Then I should know that its volume is 1
|
51
|
+
|
52
|
+
#Scenario: Should know if it has ended
|
53
|
+
#When I retrieve the audio element
|
54
|
+
#Then I should know that it has not ended
|
55
|
+
|
56
|
+
#Scenario: Should know if it is seeking
|
57
|
+
#When I retrieve the audio element
|
58
|
+
#Then I should know that it is not seeking
|
59
|
+
|
60
|
+
#Scenario: Should know if it is in a loop
|
61
|
+
#When I retrieve the audio element
|
62
|
+
#Then I should know that it is not in a loop
|
63
|
+
|
64
|
+
#Scenario: Should know if it is muted
|
65
|
+
#When I retrieve the audio element
|
66
|
+
#Then I should know that it is muted
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Support for the canvas element
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Retrieve a canvas element
|
7
|
+
When I retrieve the canvas element
|
8
|
+
Then I should know it exists
|
9
|
+
And I should know it is visible
|
10
|
+
|
11
|
+
Scenario Outline: Locating a canvas on the page
|
12
|
+
When I search for the canvas by "<search_by>"
|
13
|
+
Then I should know it is visible
|
14
|
+
|
15
|
+
Examples:
|
16
|
+
| search_by |
|
17
|
+
| id |
|
18
|
+
| class |
|
19
|
+
| name |
|
20
|
+
| xpath |
|
21
|
+
| index |
|
22
|
+
|
23
|
+
Scenario: Determining the width and height of the canvas
|
24
|
+
When I retrieve the canvas element
|
25
|
+
Then I should see that the canvas width is "200"
|
26
|
+
And I should see that the canvas height is "100"
|
27
|
+
|
28
|
+
Scenario Outline: Locating canvases using multiple parameters
|
29
|
+
When I search for the canvas element by "<param1>" and "<param2>"
|
30
|
+
Then I should know it is visible
|
31
|
+
|
32
|
+
Examples:
|
33
|
+
| param1 | param2 |
|
34
|
+
| class | index |
|
35
|
+
| name | index |
|
data/features/element.feature
CHANGED
@@ -222,3 +222,12 @@ Feature: Elements
|
|
222
222
|
Scenario: Flashing an element
|
223
223
|
When I retrieve a button element
|
224
224
|
Then I should be able to flash it
|
225
|
+
|
226
|
+
Scenario: Hovering over an element
|
227
|
+
Given I am on the hover page
|
228
|
+
When I hover over the hello link
|
229
|
+
Then the font size should be "20px"
|
230
|
+
|
231
|
+
Scenario: Getting an element's id
|
232
|
+
When I retrieve a button element
|
233
|
+
Then I should know its id is "button_id"
|
Binary file
|
@@ -24,6 +24,28 @@
|
|
24
24
|
<option value="option3" selected="true">Test 3</option>
|
25
25
|
</select>
|
26
26
|
|
27
|
+
<img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap"/>
|
28
|
+
<map id="map" name="planetmap">
|
29
|
+
<area id="area" name="area" class="area" shape="rect" coords="0,0,82,126" href="sun.html"/>
|
30
|
+
<area shape="circle" coords="90,58,3" href="mercur.html"/>
|
31
|
+
<area shape="circle" coords="124,58,8" href="venus.html"/>
|
32
|
+
</map>
|
33
|
+
|
34
|
+
<canvas id="canvas" name="canvas" class="canvas" width="200" height="100"></canvas>
|
35
|
+
<script type="text/javascript">
|
36
|
+
var c=document.getElementById('myCanvas');
|
37
|
+
var ctx=c.getContext('2d');
|
38
|
+
ctx.fillStyle="#FF0000";
|
39
|
+
ctx.fillRect=(0,0,150,75);
|
40
|
+
</script>
|
41
|
+
|
42
|
+
<audio controls id="audio" name="audio" class="audio">
|
43
|
+
<p>Your user agent does not support the HTML5 Audio element.</p>
|
44
|
+
</audio>
|
45
|
+
|
46
|
+
<video width="320" height="240" controls="controls" id="video" name="video" class="video">
|
47
|
+
Your Browser does not support the video tag.
|
48
|
+
</video>
|
27
49
|
|
28
50
|
<a href="success.html" id="link_id" name="link_name" class="link_class" title="link_title" >Google Search</a>
|
29
51
|
|
@@ -54,6 +76,25 @@
|
|
54
76
|
</tr>
|
55
77
|
</table>
|
56
78
|
|
79
|
+
<table id="table_with_thead_id" border='1'>
|
80
|
+
<thead>
|
81
|
+
<tr>
|
82
|
+
<th>Col1</th>
|
83
|
+
<th>Col2</th>
|
84
|
+
</tr>
|
85
|
+
</thead>
|
86
|
+
<tbody>
|
87
|
+
<tr>
|
88
|
+
<td>Data1</td>
|
89
|
+
<td>Data2</td>
|
90
|
+
</tr>
|
91
|
+
<tr>
|
92
|
+
<td>Data3</td>
|
93
|
+
<td>Data4</td>
|
94
|
+
</tr>
|
95
|
+
</tbody>
|
96
|
+
</table>
|
97
|
+
|
57
98
|
<form method="get" action="success.html">
|
58
99
|
<input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me"/>
|
59
100
|
<input id='button_image_id' type='image' src='images/submit.gif' alt='Submit'/>
|
@@ -84,7 +125,9 @@
|
|
84
125
|
<a href="success.html">Hello</a>
|
85
126
|
|
86
127
|
<input id=alert_button type=button onclick="alert('I am an alert')" value=Alert>
|
128
|
+
<input id=alert_button_that_reloads type=button onclick="alert('I am an alert'); location.reload()" value="Alert that Reloads">
|
87
129
|
<input id=confirm_button type=button onclick="this.value = confirm('set the value')" value=Confirm>
|
130
|
+
<input id=confirm_button_that_reloads type=button onclick="if(confirm('set the value')) location.reload()" value="Confirm that Reloads">
|
88
131
|
<input id=prompt_button type=button onclick="this.value = prompt('enter your name','John Doe')" value=Prompt>
|
89
132
|
|
90
133
|
<h1 id="h1_id" class="h1_class" name="h1_name">h1's are cool</h1>
|
Binary file
|
data/features/list_item.feature
CHANGED
@@ -51,16 +51,41 @@ Feature: Page level actions
|
|
51
51
|
When I handle the alert
|
52
52
|
Then I should be able to get the alert's message
|
53
53
|
|
54
|
+
Scenario: Handling possible alert popups
|
55
|
+
Given I am on the static elements page
|
56
|
+
When I handle the possible alert
|
57
|
+
Then I should be able to verify the popup didn't have a message
|
58
|
+
|
59
|
+
Scenario: Handling alert popups that reload the page
|
60
|
+
Given I am on the static elements page
|
61
|
+
When I handle the alert that reloads the page
|
62
|
+
Then I should be able to get the alert's message
|
63
|
+
|
54
64
|
Scenario: Handling confirm popups
|
55
65
|
Given I am on the static elements page
|
56
66
|
When I handle the confirm
|
57
67
|
Then I should be able to get the confirm's message
|
58
68
|
|
69
|
+
Scenario: Handling possible confirm popups
|
70
|
+
Given I am on the static elements page
|
71
|
+
When I handle the possible confirm
|
72
|
+
Then I should be able to verify the popup didn't have a message
|
73
|
+
|
74
|
+
Scenario: Handling confirm popups that reload the page
|
75
|
+
Given I am on the static elements page
|
76
|
+
When I handle the confirm that reloads the page
|
77
|
+
Then I should be able to get the confirm's message
|
78
|
+
|
59
79
|
Scenario: Handling prompt popups
|
60
80
|
Given I am on the static elements page
|
61
81
|
When I handle the prompt
|
62
82
|
Then I should be able to get the message and default value
|
63
83
|
|
84
|
+
Scenario: Handling possible prompt popups
|
85
|
+
Given I am on the static elements page
|
86
|
+
When I handle the possible prompt
|
87
|
+
Then I should be able to verify the popup didn't have a message
|
88
|
+
|
64
89
|
Scenario: Attach to window using title
|
65
90
|
Given I am on the static elements page
|
66
91
|
When I open a second window
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -72,4 +72,8 @@ Feature: Select List
|
|
72
72
|
|
73
73
|
Scenario: Selecting an option by its value
|
74
74
|
When I select an option using the value "option2"
|
75
|
-
Then the selected option should be "Test 2
|
75
|
+
Then the selected option should be "Test 2
|
76
|
+
|
77
|
+
Scenario: Getting the value from a selected option
|
78
|
+
When I select an option using the value "option2"
|
79
|
+
Then the selected option should have a value of "option2"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
When(/^I retrieve the area element$/) do
|
2
|
+
@element = @page.area_id_element
|
3
|
+
end
|
4
|
+
|
5
|
+
When(/^I search for the area by "([^"]*)"$/) do |how|
|
6
|
+
@how = how
|
7
|
+
end
|
8
|
+
|
9
|
+
Then(/^I should be able to click the area$/) do
|
10
|
+
@page.send("area_#{@how}")
|
11
|
+
end
|
12
|
+
|
13
|
+
Then(/^I should see the coordinates are "([^"]*)"$/) do |coords|
|
14
|
+
expect(@element.coords).to eql coords
|
15
|
+
end
|
16
|
+
|
17
|
+
Then(/^I should see the shape are "([^"]*)"$/) do |shape|
|
18
|
+
expect(@element.shape).to eql shape
|
19
|
+
end
|
20
|
+
|
21
|
+
Then(/^I should see the href is "([^"]*)"$/) do |href|
|
22
|
+
expect(@element.href).to include href
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
When(/^I retrieve the audio element$/) do
|
2
|
+
@element = @page.audio_id_element
|
3
|
+
end
|
4
|
+
|
5
|
+
When(/^I search for the audio element by "([^"]*)"$/) do |how|
|
6
|
+
@element = @page.send "audio_#{how}_element"
|
7
|
+
end
|
8
|
+
|
9
|
+
When(/^I search for the audio element by "([^"]*)" and "([^"]*)"$/) do |param1, param2|
|
10
|
+
@element = @page.send "audio_#{param1}_#{param2}_element"
|
11
|
+
end
|
12
|
+
|
13
|
+
Then(/^I should know the audio is not autoplay$/) do
|
14
|
+
expect(@element).not_to be_autoplay
|
15
|
+
end
|
16
|
+
|
17
|
+
Then(/^I should know that the controls are displayed$/) do
|
18
|
+
expect(@element).to have_controls
|
19
|
+
end
|
20
|
+
|
21
|
+
Then(/^I should know that the audio is paused$/) do
|
22
|
+
expect(@element).to be_paused
|
23
|
+
end
|
24
|
+
|
25
|
+
Then(/^I should know that the duration is greater than (\d+) seconds$/) do |duration|
|
26
|
+
expect(@element.duration).to be > duration.to_f
|
27
|
+
end
|
28
|
+
|
29
|
+
Then(/^I should know that its volume is (\d+)$/) do |volume|
|
30
|
+
expect(@element.volume).to eql volume.to_i
|
31
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
When(/^I retrieve the canvas element$/) do
|
2
|
+
@element = @page.canvas_id_element
|
3
|
+
end
|
4
|
+
|
5
|
+
When(/^I search for the canvas by "([^"]*)"$/) do |how|
|
6
|
+
@element = @page.send "canvas_#{how}_element"
|
7
|
+
end
|
8
|
+
|
9
|
+
Then(/^I should see that the canvas width is "([^"]*)"$/) do |width|
|
10
|
+
expect(@element.width).to eql width.to_i
|
11
|
+
end
|
12
|
+
|
13
|
+
Then(/^I should see that the canvas height is "([^"]*)"$/) do |height|
|
14
|
+
expect(@element.height).to eql height.to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
When(/^I search for the canvas element by "([^"]*)" and "([^"]*)"$/) do |param1, param2|
|
18
|
+
@element = @page.send "canvas_#{param1}_#{param2}_element"
|
19
|
+
end
|