Ifd_Automation 2.7 → 2.8
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.
- checksums.yaml +5 -5
- data/bin/Ifd_Automation +0 -0
- data/bin/console +0 -0
- data/bin/documentation_generator.rb +0 -0
- data/bin/generate.rb +0 -0
- data/bin/helper.rb +0 -0
- data/bin/setup +0 -0
- data/lib/Ifd_Automation.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/REST_steps.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/SOAP_steps.rb +0 -0
- data/lib/Ifd_Automation/all_steps.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/database_steps.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/dynamic_store_value_steps.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/email_steps.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/file_steps.rb +0 -0
- data/lib/Ifd_Automation/require_libs.rb +0 -0
- data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/ssh_steps.rb +0 -0
- data/lib/Ifd_Automation/version.rb +1 -1
- data/lib/Ifd_Automation/web_steps.rb +84 -0
- data/lib/helper/assertion_helper.rb +0 -0
- data/lib/helper/auto_util.rb +0 -0
- data/lib/helper/database_helper.rb +1 -1
- data/lib/helper/file_helper.rb +0 -0
- data/lib/helper/mail_helper.rb +0 -0
- data/lib/helper/rest_helper.rb +0 -0
- data/lib/helper/soap_helper.rb +0 -0
- data/lib/helper/ssh_helper.rb +0 -0
- data/lib/helper/web_steps_helper.rb +26 -43
- data/project/Dockerfile +0 -0
- data/project/Gemfile +0 -0
- data/project/README.md +5 -21
- data/project/cucumber.yml +3 -3
- data/project/docker-compose.yml +0 -0
- data/project/features/Screenshot/sample.jpg +0 -0
- data/project/features/TestData/globalData.yml +0 -0
- data/project/features/TestSuite/WebGUI.feature +4 -17
- data/project/features/pre-defined-steps/database_steps.md +11 -0
- data/project/features/pre-defined-steps/dynamic_value_steps.md +7 -0
- data/project/features/pre-defined-steps/email_steps.md +4 -0
- data/project/features/pre-defined-steps/file_steps.md +5 -0
- data/project/features/pre-defined-steps/rest_steps.md +9 -0
- data/project/features/pre-defined-steps/soap_steps.md +8 -0
- data/project/features/pre-defined-steps/ssh_steps.md +7 -0
- data/project/features/pre-defined-steps/web_steps.md +24 -0
- data/project/features/step_definitions/lib_steps/actionwords.rb +18 -11
- data/project/features/step_definitions/lib_steps/steps.rb +10 -2
- data/project/features/step_definitions/repositories/project_object.yml +6 -1
- data/project/features/support/env.rb +0 -0
- data/project/features/support/hooks.rb +0 -0
- metadata +19 -32
- data/project/Gemfile.lock +0 -176
- data/project/features/step_definitions/IFD_Libraries/web_steps.rb +0 -89
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f2d70b22752d7799f95d20fb516cbb2ef18fed586b7e68d458108cdf0b00504c
|
4
|
+
data.tar.gz: a3a46f8268032053889e83da5d9cf5f6bf7b18ebca30ceaf6253d57eb89e66b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 483e6dc26d00a739d47cb6b6bdf8acf09d0aeae6c8f9bd8c9ad4fdb4e8a4071612280e1218dd790914bfae1095c3d17c4bc0ffc75d391a2c36f1627f0d527c16
|
7
|
+
data.tar.gz: bd318d0452375a1468197d59bd98cbf8f741b27f782e4dba946a33ef33e42eb9261574a1609cda1280cea1f6d7bb1041be9e00c67108d9e303e87eb5a687f939
|
data/bin/Ifd_Automation
CHANGED
File without changes
|
data/bin/console
CHANGED
File without changes
|
File without changes
|
data/bin/generate.rb
CHANGED
File without changes
|
data/bin/helper.rb
CHANGED
File without changes
|
data/bin/setup
CHANGED
File without changes
|
data/lib/Ifd_Automation.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/{project/features/step_definitions/IFD_Libraries → lib/Ifd_Automation}/database_steps.rb
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,84 @@
|
|
1
|
+
Given /I am on the "(.*?)" page/ do |url|
|
2
|
+
url = Utils.check_dynamic_value(url)
|
3
|
+
execute_openbrowser(url)
|
4
|
+
end
|
5
|
+
|
6
|
+
When /I wait for (\d+) seconds/ do |second|
|
7
|
+
sleep(second.to_i)
|
8
|
+
end
|
9
|
+
|
10
|
+
And /I click on "(.*?)"/ do |object|
|
11
|
+
execute_click(object)
|
12
|
+
end
|
13
|
+
|
14
|
+
Then /I double click on "(.*?)"/ do |element|
|
15
|
+
double_click(element)
|
16
|
+
end
|
17
|
+
|
18
|
+
And /I set text on "(.*?)" with "(.*?)"/ do |object, text|
|
19
|
+
text = Utils.check_dynamic_value text
|
20
|
+
execute_settext(object, text)
|
21
|
+
end
|
22
|
+
|
23
|
+
And /I select option on "(.*?)" with "(.*?)"/ do |object, text|
|
24
|
+
execute_select(object, text)
|
25
|
+
end
|
26
|
+
|
27
|
+
Then /I maximize browser window/ do
|
28
|
+
maximize_browser
|
29
|
+
end
|
30
|
+
|
31
|
+
Then /I capture a screenshot as "(.*)"/ do |name|
|
32
|
+
file_path = $test_data_dir + name.downcase
|
33
|
+
page.save_screenshot(file_path)
|
34
|
+
end
|
35
|
+
|
36
|
+
Then /I switch to window having title "(.*?)"/ do |window_title|
|
37
|
+
switch_to_window_by_title window_title
|
38
|
+
end
|
39
|
+
|
40
|
+
Then /I scroll to (top|end) of page/ do |to|
|
41
|
+
scroll_page(to)
|
42
|
+
end
|
43
|
+
|
44
|
+
Then /I check property "(.*?)" with "(.*?)" has( | not)? value "(.*?)"/ do |object, property, negate, value|
|
45
|
+
value = Utils.bind_with_dyn_vars value
|
46
|
+
execute_checkproperty(object, property, negate, value)
|
47
|
+
end
|
48
|
+
|
49
|
+
Then /I should see text alert "(.*?)"/ do |actual_value|
|
50
|
+
check_alert_text(actual_value)
|
51
|
+
end
|
52
|
+
|
53
|
+
Given /I move mouse to element "(.*)" and click/ do |object|
|
54
|
+
execute_mousehoverandclick(object)
|
55
|
+
end
|
56
|
+
|
57
|
+
And /I remove attribute "(.*)" on object "(.*)"/ do |attr, object|
|
58
|
+
remove_element_attribute object, attr
|
59
|
+
end
|
60
|
+
|
61
|
+
And /I set state on "(.*?)" with "(.*?)"/ do |object, state|
|
62
|
+
execute_setstate(object, state)
|
63
|
+
end
|
64
|
+
|
65
|
+
And /browser window is re-sized to width "(.*)" and height "(.*)"/ do |x,y|
|
66
|
+
resize_window_screen(x,y)
|
67
|
+
end
|
68
|
+
|
69
|
+
And /I verify object "(.*)" with "(.*)" has value "(.*)"/ do |object,style,expected_value|
|
70
|
+
actual_value = get_computed_style(object,style)
|
71
|
+
IFD_Assertion.assert_string_equal(expected_value,actual_value)
|
72
|
+
end
|
73
|
+
|
74
|
+
Then /I should( not)? see page title "(.*)"/ do |present, title|
|
75
|
+
check_title(title, present.empty?)
|
76
|
+
end
|
77
|
+
|
78
|
+
And /I move mouse to element "(.*)" and choose item "(.*)" then click/ do |var, element|
|
79
|
+
movemouseandclick(var, element)
|
80
|
+
end
|
81
|
+
|
82
|
+
And /I hold element "(.*)" and move from location x "(.*)" to y "(.*)"$/ do |el, x, y|
|
83
|
+
drag_drop el, x, y
|
84
|
+
end
|
File without changes
|
data/lib/helper/auto_util.rb
CHANGED
File without changes
|
data/lib/helper/file_helper.rb
CHANGED
File without changes
|
data/lib/helper/mail_helper.rb
CHANGED
File without changes
|
data/lib/helper/rest_helper.rb
CHANGED
File without changes
|
data/lib/helper/soap_helper.rb
CHANGED
File without changes
|
data/lib/helper/ssh_helper.rb
CHANGED
File without changes
|
@@ -68,15 +68,17 @@ require 'net/https'
|
|
68
68
|
|
69
69
|
def switch_to_window_by_title(window_title)
|
70
70
|
$previous_window = page.driver.browser.window_handle
|
71
|
-
window_found = false
|
71
|
+
@window_found = false
|
72
72
|
page.driver.browser.window_handles.each { |handle|
|
73
73
|
page.driver.browser.switch_to.window handle
|
74
74
|
if page.title == window_title
|
75
|
-
window_found = true
|
75
|
+
@window_found = true
|
76
76
|
break
|
77
77
|
end
|
78
78
|
}
|
79
|
-
|
79
|
+
if @window_found == false
|
80
|
+
raise "Window having title \"#{window_title}\" not found"
|
81
|
+
end
|
80
82
|
end
|
81
83
|
|
82
84
|
def scroll_page(to)
|
@@ -198,6 +200,7 @@ require 'net/https'
|
|
198
200
|
end
|
199
201
|
|
200
202
|
def execute_checkproperty(element, property, negate, value, isSpecialChar=false)
|
203
|
+
validate_option_by(property)
|
201
204
|
Capybara.configure do |config|
|
202
205
|
config.ignore_hidden_elements = false
|
203
206
|
end
|
@@ -211,52 +214,13 @@ require 'net/https'
|
|
211
214
|
else
|
212
215
|
# put_log "\n\n\t>>> execute_checkproperty: finish to found element"
|
213
216
|
if foundElement != nil
|
217
|
+
|
214
218
|
if property.upcase == 'VALUE'
|
215
219
|
actual_value = foundElement.value()
|
216
220
|
|
217
221
|
elsif property.upcase == 'TEXT'
|
218
222
|
actual_value = foundElement.text()
|
219
223
|
|
220
|
-
elsif property.upcase == 'SPECIAL CHAR'
|
221
|
-
actual_value = foundElement.text()
|
222
|
-
isSpecialChar = true
|
223
|
-
|
224
|
-
elsif property.upcase == 'TAGNAME'
|
225
|
-
actual_value = foundElement.tag_name()
|
226
|
-
|
227
|
-
elsif property.upcase == 'STYLE'
|
228
|
-
actual_value = foundElement[:style]
|
229
|
-
|
230
|
-
elsif property.upcase == 'DISABLED'
|
231
|
-
actual_value = foundElement[:disabled]
|
232
|
-
|
233
|
-
elsif property.upcase == 'WIDTH'
|
234
|
-
actual_value = foundElement[:width]
|
235
|
-
|
236
|
-
elsif property.upcase == 'HEIGHT'
|
237
|
-
actual_value = foundElement[:height]
|
238
|
-
|
239
|
-
elsif property.upcase == 'ID'
|
240
|
-
actual_value = foundElement[:id]
|
241
|
-
|
242
|
-
elsif property.upcase == 'NAME'
|
243
|
-
actual_value = foundElement[:name]
|
244
|
-
|
245
|
-
elsif property.upcase == 'CLASS'
|
246
|
-
actual_value = foundElement[:class]
|
247
|
-
|
248
|
-
elsif property.upcase == 'HREF'
|
249
|
-
actual_value = foundElement[:href]
|
250
|
-
|
251
|
-
elsif property.upcase == 'TITLE'
|
252
|
-
actual_value = foundElement[:title]
|
253
|
-
|
254
|
-
elsif property.upcase == 'TYPE'
|
255
|
-
actual_value = foundElement[:type]
|
256
|
-
|
257
|
-
elsif property.upcase == 'CHECKED'
|
258
|
-
actual_value = "true" if foundElement.checked? == true
|
259
|
-
actual_value = "false" if foundElement.checked? == false
|
260
224
|
else
|
261
225
|
actual_value = foundElement["#{property}"]
|
262
226
|
end
|
@@ -287,6 +251,15 @@ require 'net/https'
|
|
287
251
|
end
|
288
252
|
end
|
289
253
|
|
254
|
+
def check_valid_option_by?(option_by)
|
255
|
+
%w(text value).include? option_by
|
256
|
+
end
|
257
|
+
|
258
|
+
def validate_option_by(option_by)
|
259
|
+
raise "Please select valid option, invalid option - #{option_by}" unless check_valid_option_by? option_by
|
260
|
+
end
|
261
|
+
|
262
|
+
|
290
263
|
def execute_gettext(element)
|
291
264
|
foundElement = find_object(element)
|
292
265
|
if foundElement != nil
|
@@ -445,3 +418,13 @@ def get_object_and_store_to_file(object,file_name)
|
|
445
418
|
f << $text + "\n"
|
446
419
|
end
|
447
420
|
end
|
421
|
+
|
422
|
+
def drag_drop el, x, y
|
423
|
+
foundElement = page.driver.browser.find_element(css: "#{el}")
|
424
|
+
page.driver.browser.action.drag_and_drop_by(foundElement, x, y).perform
|
425
|
+
end
|
426
|
+
|
427
|
+
def movemouseandclick var, element
|
428
|
+
Selenium::WebDriver::Support::Select.new(page.driver.browser.find_element(:id, "#{var}")).select_by(:text, "#{element}")
|
429
|
+
page.driver.browser.find_element(:id, "#{var}").click
|
430
|
+
end
|
data/project/Dockerfile
CHANGED
File without changes
|
data/project/Gemfile
CHANGED
File without changes
|
data/project/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###Ifd_Automation gem
|
2
2
|
Ifd_Automation is an open-source tool for automating GUI, RESTful, SOAP, Database and eMail.
|
3
|
-
Importantly, Ifd_Automation is
|
3
|
+
Importantly, Ifd_Automation is cross-platform, it allows you to write tests against multiple platforms (Linux, Windows, MacOS) on multiple browsers (chrome, firefox ...) using the same API.
|
4
4
|
|
5
5
|
###Getting Started
|
6
6
|
These instructions will get you a copy of the project up and running on your local machine for testing purposes. See deployment for notes on how to install Ifd_Automation gem
|
@@ -26,8 +26,10 @@ By default, the steps which relate to test data will be read/created from this f
|
|
26
26
|
- TestSuite folder
|
27
27
|
Place to store user's feature files.
|
28
28
|
|
29
|
+
- pre-defined-steps folder
|
30
|
+
All available steps from framework
|
31
|
+
|
29
32
|
- Step_definitions folder
|
30
|
-
- IFD_Libraries (contains custom Ifd_Automation steps)
|
31
33
|
- lib_steps
|
32
34
|
- actionword.rb
|
33
35
|
- steps.rb
|
@@ -37,24 +39,6 @@ Place to store user's feature files.
|
|
37
39
|
- support
|
38
40
|
- env.rb
|
39
41
|
- hook.rb
|
42
|
+
|
40
43
|
###Usage
|
41
44
|
####Available steps
|
42
|
-
All available steps are located at IFD_Libaries folder, below are instructions show how to use these libraries
|
43
|
-
|
44
|
-
----
|
45
|
-
#####web steps
|
46
|
-
1. Open browser and navigate to the page test page. The page address can be insert directly into step or using dynamic
|
47
|
-
`Given I am on the "page_url" page`
|
48
|
-
#####example
|
49
|
-
- `Given I am on the "http://google.com" page`
|
50
|
-
- `Given I am on the "params='test_page'" page`
|
51
|
-
|
52
|
-
2. Wait for number of seconds before doing the next step
|
53
|
-
`And I wait for <number> seconds`
|
54
|
-
#####example
|
55
|
-
`And I wait for 5 seconds`
|
56
|
-
3. Click on an element
|
57
|
-
`And I click on "string"`
|
58
|
-
#####example
|
59
|
-
`And I click on "button_login"`
|
60
|
-
|
data/project/cucumber.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
default: --no-source
|
2
|
-
|
3
|
-
remote_chrome: BROWSER=chrome
|
4
|
-
remote_firefox: BROWSER=firefox
|
2
|
+
remote: SELENIUM=remote
|
3
|
+
remote_chrome: BROWSER=chrome -p remote
|
4
|
+
remote_firefox: BROWSER=firefox -p remote
|
5
5
|
junit_report: -f progress -f junit -o Report
|
6
6
|
html_report: -f progress -f html -o Report
|
data/project/docker-compose.yml
CHANGED
File without changes
|
File without changes
|
File without changes
|
@@ -1,18 +1,5 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: Jira ticket name
|
2
2
|
|
3
|
-
Scenario:
|
4
|
-
|
5
|
-
|
6
|
-
* I create xml file and store as string "$xml_soap":
|
7
|
-
"""
|
8
|
-
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
9
|
-
<soap:Body>
|
10
|
-
<UpdateSecret xmlns="urn:thesecretserver.com">
|
11
|
-
<token><%= $test %></token>
|
12
|
-
<secret></secret>
|
13
|
-
</UpdateSecret>
|
14
|
-
</soap:Body>
|
15
|
-
</soap:Envelope>
|
16
|
-
"""
|
17
|
-
* I print the value of "$xml_soap"
|
18
|
-
* I send SOAP request with operation name "test_operation" and xml data "$xml_soap"
|
3
|
+
Scenario: login to system with valid account
|
4
|
+
Given I am on the "https://html5demos.com/drag" page
|
5
|
+
Given I drag object "test1" to "test2"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#Pre-defined Steps
|
2
|
+
|
3
|
+
I create connection to database with:
|
4
|
+
I close SQL connection
|
5
|
+
I run sql script "<string>"
|
6
|
+
I run sql script:
|
7
|
+
I run sql select query script:
|
8
|
+
show me the result of SQL statement
|
9
|
+
the result of SQL statement should be:
|
10
|
+
the result of SQL statement should have "<string>" with value "<string>"
|
11
|
+
I store the result of SQL script as ".*"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#Pre-defined Steps
|
2
|
+
|
3
|
+
I set headers:
|
4
|
+
I send a REST GET|PUT|POST|DELETE request for|to "<string>" with the following:
|
5
|
+
I store the REST result at node "<string>" as "<string>"
|
6
|
+
I print the result of REST request
|
7
|
+
I should see REST response code "<string>"
|
8
|
+
the JSON response should be:
|
9
|
+
the JSON response at node "<string>" should have "<string>"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#Pre-defined Steps
|
2
|
+
|
3
|
+
I get SOAP operations list from '.'
|
4
|
+
I send SOAP request with operation name "<string>" and XML file "<string>"
|
5
|
+
I send SOAP request with operation name "<string>" and xml data "<string>"
|
6
|
+
the status code should be "<string>"
|
7
|
+
the SOAP response node should have "." with text "."
|
8
|
+
I print the SOAP response
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#Pre-defined Steps
|
2
|
+
|
3
|
+
Given I am on the "page_url" page
|
4
|
+
And I wait for <number> seconds
|
5
|
+
And I click on "string"
|
6
|
+
And I double click on "string"
|
7
|
+
And I set text on "string" with "string"
|
8
|
+
And I capture a screenshot as "string"
|
9
|
+
And I switch to window having title "string"
|
10
|
+
And I scroll to top of page
|
11
|
+
And I scroll to end of page
|
12
|
+
I check property "element" with "value" has value "element value"
|
13
|
+
I check property "element" with "text" has value "element value"
|
14
|
+
I check property "element" with "value" has not value "element value"
|
15
|
+
I check property "element" with "text" has not value "element value"
|
16
|
+
I should see text alert "alert text"
|
17
|
+
I move mouse to element "element" and click
|
18
|
+
I remove attribute "attribute name" on object "object"
|
19
|
+
I set state on "elment" with "true"
|
20
|
+
I set state on "elment" with "false"
|
21
|
+
browser window is re-sized to width "width number" and height "height number"
|
22
|
+
I verify object "element" with "element attribute" has value "attribute value"
|
23
|
+
I should see page title "page title"
|
24
|
+
I should not see page title "page title"
|
@@ -1,16 +1,23 @@
|
|
1
1
|
module Actionwords
|
2
2
|
|
3
|
-
def login_to_system
|
4
|
-
step %{I am on the "
|
5
|
-
step %{I set text on "textbox_username" with "
|
6
|
-
step %{I set text on "textbox_password" with "
|
7
|
-
step %{I click on "
|
3
|
+
def login_to_system(page_url,user,pass)
|
4
|
+
step %{I am on the "#{page_url}" page}
|
5
|
+
step %{I set text on "textbox_username" with "#{user}"}
|
6
|
+
step %{I set text on "textbox_password" with "#{pass}"}
|
7
|
+
step %{I click on "login" button}
|
8
8
|
end
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
|
10
|
+
|
11
|
+
def execute_drag_to_new_object from_element, element
|
12
|
+
found_from_element = find_object(from_element)
|
13
|
+
foundElement = find_object(element)
|
14
|
+
if foundElement != nil and found_from_element != nil
|
15
|
+
found_from_element.drag_to(foundElement)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def anh_123
|
20
|
+
|
21
|
+
end
|
15
22
|
|
16
23
|
end
|
@@ -1,6 +1,14 @@
|
|
1
1
|
require_relative 'actionwords'
|
2
2
|
World(Actionwords)
|
3
3
|
|
4
|
-
Given /I log in to
|
5
|
-
login_to_system
|
4
|
+
Given /I log in to page "(.*)" with user "(.*)" and pass "(.*)"/ do |page_url,user,pass|
|
5
|
+
login_to_system(page_url,user,pass)
|
6
|
+
end
|
7
|
+
|
8
|
+
And /^I drag object "(.*?)" to "(.*?)"$/ do |from_object, object|
|
9
|
+
execute_drag_to_new_object(from_object, object)
|
10
|
+
end
|
11
|
+
|
12
|
+
Given /anh/ do
|
13
|
+
anh
|
6
14
|
end
|
@@ -1,2 +1,7 @@
|
|
1
1
|
textbox_username: {css_selector: '#userField'}
|
2
|
-
textbox_password: {css_selector: '#passwordField'}
|
2
|
+
textbox_password: {css_selector: '#passwordField'}
|
3
|
+
test1: {css_selector: '#two'}
|
4
|
+
test2: {css_selector: '#bin'}
|
5
|
+
{"textbox_username":"{\"css_selector\":\"#userField\"}"}
|
6
|
+
{"textbox_password":"{\"css_selector\":\"#passwordField\"}"}
|
7
|
+
{"test1":"{\"css_selector\":\"#two\"}"}
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Ifd_Automation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.8'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anh Pham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|
@@ -160,26 +160,6 @@ dependencies:
|
|
160
160
|
- - '='
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: 5.1.5
|
163
|
-
- !ruby/object:Gem::Dependency
|
164
|
-
name: tiny_tds
|
165
|
-
requirement: !ruby/object:Gem::Requirement
|
166
|
-
requirements:
|
167
|
-
- - "~>"
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: '2.1'
|
170
|
-
- - ">="
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: 2.1.1
|
173
|
-
type: :runtime
|
174
|
-
prerelease: false
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
176
|
-
requirements:
|
177
|
-
- - "~>"
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version: '2.1'
|
180
|
-
- - ">="
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: 2.1.1
|
183
163
|
- !ruby/object:Gem::Dependency
|
184
164
|
name: activerecord-sqlserver-adapter
|
185
165
|
requirement: !ruby/object:Gem::Requirement
|
@@ -256,9 +236,17 @@ files:
|
|
256
236
|
- bin/helper.rb
|
257
237
|
- bin/setup
|
258
238
|
- lib/Ifd_Automation.rb
|
239
|
+
- lib/Ifd_Automation/REST_steps.rb
|
240
|
+
- lib/Ifd_Automation/SOAP_steps.rb
|
259
241
|
- lib/Ifd_Automation/all_steps.rb
|
242
|
+
- lib/Ifd_Automation/database_steps.rb
|
243
|
+
- lib/Ifd_Automation/dynamic_store_value_steps.rb
|
244
|
+
- lib/Ifd_Automation/email_steps.rb
|
245
|
+
- lib/Ifd_Automation/file_steps.rb
|
260
246
|
- lib/Ifd_Automation/require_libs.rb
|
247
|
+
- lib/Ifd_Automation/ssh_steps.rb
|
261
248
|
- lib/Ifd_Automation/version.rb
|
249
|
+
- lib/Ifd_Automation/web_steps.rb
|
262
250
|
- lib/helper/assertion_helper.rb
|
263
251
|
- lib/helper/auto_util.rb
|
264
252
|
- lib/helper/database_helper.rb
|
@@ -270,21 +258,20 @@ files:
|
|
270
258
|
- lib/helper/web_steps_helper.rb
|
271
259
|
- project/Dockerfile
|
272
260
|
- project/Gemfile
|
273
|
-
- project/Gemfile.lock
|
274
261
|
- project/README.md
|
275
262
|
- project/cucumber.yml
|
276
263
|
- project/docker-compose.yml
|
277
264
|
- project/features/Screenshot/sample.jpg
|
278
265
|
- project/features/TestData/globalData.yml
|
279
266
|
- project/features/TestSuite/WebGUI.feature
|
280
|
-
- project/features/
|
281
|
-
- project/features/
|
282
|
-
- project/features/
|
283
|
-
- project/features/
|
284
|
-
- project/features/
|
285
|
-
- project/features/
|
286
|
-
- project/features/
|
287
|
-
- project/features/
|
267
|
+
- project/features/pre-defined-steps/database_steps.md
|
268
|
+
- project/features/pre-defined-steps/dynamic_value_steps.md
|
269
|
+
- project/features/pre-defined-steps/email_steps.md
|
270
|
+
- project/features/pre-defined-steps/file_steps.md
|
271
|
+
- project/features/pre-defined-steps/rest_steps.md
|
272
|
+
- project/features/pre-defined-steps/soap_steps.md
|
273
|
+
- project/features/pre-defined-steps/ssh_steps.md
|
274
|
+
- project/features/pre-defined-steps/web_steps.md
|
288
275
|
- project/features/step_definitions/lib_steps/actionwords.rb
|
289
276
|
- project/features/step_definitions/lib_steps/steps.rb
|
290
277
|
- project/features/step_definitions/repositories/project_object.yml
|
@@ -310,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
310
297
|
version: '0'
|
311
298
|
requirements: []
|
312
299
|
rubyforge_project:
|
313
|
-
rubygems_version: 2.
|
300
|
+
rubygems_version: 2.7.6
|
314
301
|
signing_key:
|
315
302
|
specification_version: 4
|
316
303
|
summary: SELENIUM WEBDRIVER WITH RUBY & CUCUMBER
|
data/project/Gemfile.lock
DELETED
@@ -1,176 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
Ifd_Automation (2.7)
|
5
|
-
actionmailer (~> 5.1, >= 5.1.4)
|
6
|
-
activerecord (= 5.1.5)
|
7
|
-
activerecord-sqlserver-adapter (~> 5.1, >= 5.1.6)
|
8
|
-
capybara (~> 2.7, >= 2.7.1)
|
9
|
-
cucumber (~> 3.1)
|
10
|
-
httparty (~> 0.15.6)
|
11
|
-
jsonpath (~> 0.5.8)
|
12
|
-
net-ssh (~> 3.2)
|
13
|
-
parallel_tests (~> 2.7, >= 2.7.1)
|
14
|
-
rspec (~> 3.7.0, >= 3.7.0)
|
15
|
-
savon (~> 2.11, >= 2.11.1)
|
16
|
-
selenium-webdriver (~> 3.6, >= 3.6.0)
|
17
|
-
tiny_tds (~> 2.1, >= 2.1.1)
|
18
|
-
actionmailer (5.1.5)
|
19
|
-
actionpack (= 5.1.5)
|
20
|
-
actionview (= 5.1.5)
|
21
|
-
activejob (= 5.1.5)
|
22
|
-
mail (~> 2.5, >= 2.5.4)
|
23
|
-
rails-dom-testing (~> 2.0)
|
24
|
-
actionpack (5.1.5)
|
25
|
-
actionview (= 5.1.5)
|
26
|
-
activesupport (= 5.1.5)
|
27
|
-
rack (~> 2.0)
|
28
|
-
rack-test (>= 0.6.3)
|
29
|
-
rails-dom-testing (~> 2.0)
|
30
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
31
|
-
actionview (5.1.5)
|
32
|
-
activesupport (= 5.1.5)
|
33
|
-
builder (~> 3.1)
|
34
|
-
erubi (~> 1.4)
|
35
|
-
rails-dom-testing (~> 2.0)
|
36
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
37
|
-
activejob (5.1.5)
|
38
|
-
activesupport (= 5.1.5)
|
39
|
-
globalid (>= 0.3.6)
|
40
|
-
activemodel (5.1.5)
|
41
|
-
activesupport (= 5.1.5)
|
42
|
-
activerecord (5.1.5)
|
43
|
-
activemodel (= 5.1.5)
|
44
|
-
activesupport (= 5.1.5)
|
45
|
-
arel (~> 8.0)
|
46
|
-
activerecord-sqlserver-adapter (5.1.6)
|
47
|
-
activerecord (~> 5.1.0)
|
48
|
-
tiny_tds
|
49
|
-
activesupport (5.1.5)
|
50
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
51
|
-
i18n (~> 0.7)
|
52
|
-
minitest (~> 5.1)
|
53
|
-
tzinfo (~> 1.1)
|
54
|
-
addressable (2.5.2)
|
55
|
-
public_suffix (>= 2.0.2, < 4.0)
|
56
|
-
akami (1.3.1)
|
57
|
-
gyoku (>= 0.4.0)
|
58
|
-
nokogiri
|
59
|
-
arel (8.0.0)
|
60
|
-
backports (3.11.3)
|
61
|
-
builder (3.2.3)
|
62
|
-
capybara (2.18.0)
|
63
|
-
addressable
|
64
|
-
mini_mime (>= 0.1.3)
|
65
|
-
nokogiri (>= 1.3.3)
|
66
|
-
rack (>= 1.0.0)
|
67
|
-
rack-test (>= 0.5.4)
|
68
|
-
xpath (>= 2.0, < 4.0)
|
69
|
-
childprocess (0.9.0)
|
70
|
-
ffi (~> 1.0, >= 1.0.11)
|
71
|
-
concurrent-ruby (1.0.5)
|
72
|
-
crass (1.0.4)
|
73
|
-
cucumber (3.1.0)
|
74
|
-
builder (>= 2.1.2)
|
75
|
-
cucumber-core (~> 3.1.0)
|
76
|
-
cucumber-expressions (~> 5.0.4)
|
77
|
-
cucumber-wire (~> 0.0.1)
|
78
|
-
diff-lcs (~> 1.3)
|
79
|
-
gherkin (~> 5.0)
|
80
|
-
multi_json (>= 1.7.5, < 2.0)
|
81
|
-
multi_test (>= 0.1.2)
|
82
|
-
cucumber-core (3.1.0)
|
83
|
-
backports (>= 3.8.0)
|
84
|
-
cucumber-tag_expressions (~> 1.1.0)
|
85
|
-
gherkin (>= 5.0.0)
|
86
|
-
cucumber-expressions (5.0.17)
|
87
|
-
cucumber-tag_expressions (1.1.1)
|
88
|
-
cucumber-wire (0.0.1)
|
89
|
-
diff-lcs (1.3)
|
90
|
-
erubi (1.7.1)
|
91
|
-
ffi (1.9.23)
|
92
|
-
gherkin (5.0.0)
|
93
|
-
globalid (0.4.1)
|
94
|
-
activesupport (>= 4.2.0)
|
95
|
-
gyoku (1.3.1)
|
96
|
-
builder (>= 2.1.2)
|
97
|
-
httparty (0.15.7)
|
98
|
-
multi_xml (>= 0.5.2)
|
99
|
-
httpi (2.4.3)
|
100
|
-
rack
|
101
|
-
socksify
|
102
|
-
i18n (0.9.5)
|
103
|
-
concurrent-ruby (~> 1.0)
|
104
|
-
jsonpath (0.5.8)
|
105
|
-
multi_json
|
106
|
-
loofah (2.2.2)
|
107
|
-
crass (~> 1.0.2)
|
108
|
-
nokogiri (>= 1.5.9)
|
109
|
-
mail (2.7.0)
|
110
|
-
mini_mime (>= 0.1.1)
|
111
|
-
mini_mime (1.0.0)
|
112
|
-
mini_portile2 (2.3.0)
|
113
|
-
minitest (5.8.3)
|
114
|
-
multi_json (1.13.1)
|
115
|
-
multi_test (0.1.2)
|
116
|
-
multi_xml (0.6.0)
|
117
|
-
net-ssh (3.2.0)
|
118
|
-
nokogiri (1.8.2)
|
119
|
-
mini_portile2 (~> 2.3.0)
|
120
|
-
nori (2.6.0)
|
121
|
-
parallel (1.12.1)
|
122
|
-
parallel_tests (2.21.3)
|
123
|
-
parallel
|
124
|
-
public_suffix (3.0.2)
|
125
|
-
rack (2.0.4)
|
126
|
-
rack-test (1.0.0)
|
127
|
-
rack (>= 1.0, < 3)
|
128
|
-
rails-dom-testing (2.0.3)
|
129
|
-
activesupport (>= 4.2.0)
|
130
|
-
nokogiri (>= 1.6)
|
131
|
-
rails-html-sanitizer (1.0.4)
|
132
|
-
loofah (~> 2.2, >= 2.2.2)
|
133
|
-
rspec (3.7.0)
|
134
|
-
rspec-core (~> 3.7.0)
|
135
|
-
rspec-expectations (~> 3.7.0)
|
136
|
-
rspec-mocks (~> 3.7.0)
|
137
|
-
rspec-core (3.7.1)
|
138
|
-
rspec-support (~> 3.7.0)
|
139
|
-
rspec-expectations (3.7.0)
|
140
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
141
|
-
rspec-support (~> 3.7.0)
|
142
|
-
rspec-mocks (3.7.0)
|
143
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
144
|
-
rspec-support (~> 3.7.0)
|
145
|
-
rspec-support (3.7.1)
|
146
|
-
rubyzip (1.2.1)
|
147
|
-
savon (2.12.0)
|
148
|
-
akami (~> 1.2)
|
149
|
-
builder (>= 2.1.2)
|
150
|
-
gyoku (~> 1.2)
|
151
|
-
httpi (~> 2.3)
|
152
|
-
nokogiri (>= 1.8.1)
|
153
|
-
nori (~> 2.4)
|
154
|
-
wasabi (~> 3.4)
|
155
|
-
selenium-webdriver (3.11.0)
|
156
|
-
childprocess (~> 0.5)
|
157
|
-
rubyzip (~> 1.2)
|
158
|
-
socksify (1.7.1)
|
159
|
-
thread_safe (0.3.6)
|
160
|
-
tiny_tds (2.1.1)
|
161
|
-
tzinfo (1.2.5)
|
162
|
-
thread_safe (~> 0.1)
|
163
|
-
wasabi (3.5.0)
|
164
|
-
httpi (~> 2.0)
|
165
|
-
nokogiri (>= 1.4.2)
|
166
|
-
xpath (3.0.0)
|
167
|
-
nokogiri (~> 1.8)
|
168
|
-
|
169
|
-
PLATFORMS
|
170
|
-
ruby
|
171
|
-
|
172
|
-
DEPENDENCIES
|
173
|
-
Ifd_Automation
|
174
|
-
|
175
|
-
BUNDLED WITH
|
176
|
-
1.13.6
|
@@ -1,89 +0,0 @@
|
|
1
|
-
|
2
|
-
# Navigate to a particular page
|
3
|
-
Given(/^I am on the "([^"]*)" page$/) do |url|
|
4
|
-
url = Utils.check_dynamic_value(url)
|
5
|
-
execute_openbrowser(url)
|
6
|
-
end
|
7
|
-
|
8
|
-
# # Wait for the specific time
|
9
|
-
When /^I wait for (\d+) seconds$/ do |second|
|
10
|
-
sleep(second.to_i)
|
11
|
-
end
|
12
|
-
|
13
|
-
# Finds a button or link by id, text or value and clicks it
|
14
|
-
And /^I click on "([^\"]*)"$/ do |object|
|
15
|
-
execute_click(object)
|
16
|
-
end
|
17
|
-
|
18
|
-
# double click on web element
|
19
|
-
Then /^I double click on element "(.*?)"$/ do |element|
|
20
|
-
double_click(element)
|
21
|
-
end
|
22
|
-
|
23
|
-
# Fill in a text box or text area with a value
|
24
|
-
And /^I set text on "(.*?)" with "(.*?)"$/ do |object, text|
|
25
|
-
text = Utils.check_dynamic_value text
|
26
|
-
execute_settext(object, text)
|
27
|
-
end
|
28
|
-
|
29
|
-
# select option
|
30
|
-
And /^I select option on "(.*?)" with "(.*?)"$/ do |object, text|
|
31
|
-
execute_select(object, text)
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
# step to maximize browser
|
36
|
-
Then(/^I maximize browser window$/) do
|
37
|
-
maximize_browser
|
38
|
-
end
|
39
|
-
|
40
|
-
Then /^Capture a screenshot as "(.*)"$/ do |name|
|
41
|
-
file_path = $test_data_dir + name.downcase
|
42
|
-
page.save_screenshot(file_path)
|
43
|
-
end
|
44
|
-
|
45
|
-
Then(/^I switch to window having title "(.*?)"$/) do |window_title|
|
46
|
-
switch_to_window_by_title window_title
|
47
|
-
end
|
48
|
-
|
49
|
-
# steps to scroll web page to top or end
|
50
|
-
Then(/^I scroll to (top|end) of page$/) do |to|
|
51
|
-
scroll_page(to)
|
52
|
-
end
|
53
|
-
|
54
|
-
# check property for object
|
55
|
-
Then /^I check property "(.*?)" with "(.*?)" has( | not)? value "(.*?)"$/ do |object, property, negate, value|
|
56
|
-
value = Utils.bind_with_dyn_vars value
|
57
|
-
execute_checkproperty(object, property, negate, value)
|
58
|
-
end
|
59
|
-
|
60
|
-
# step to assert javascript pop-up alert text
|
61
|
-
Then(/^I should see alert text as "(.*?)"$/) do |actual_value|
|
62
|
-
check_alert_text(actual_value)
|
63
|
-
end
|
64
|
-
|
65
|
-
Given /^I move mouse to element "(.*)" and click$/ do |object|
|
66
|
-
execute_mousehoverandclick(object)
|
67
|
-
end
|
68
|
-
|
69
|
-
And /^remove attribute "(.*)" on object "(.*)"$/ do |attr, object|
|
70
|
-
remove_element_attribute object, attr
|
71
|
-
end
|
72
|
-
|
73
|
-
# set state for check box, combo box
|
74
|
-
And /^I set state on "(.*?)" with "(.*?)"$/ do |object, state|
|
75
|
-
execute_setstate(object, state)
|
76
|
-
end
|
77
|
-
|
78
|
-
And /I resize window screen to "(.*)","(.*)"/ do |x,y|
|
79
|
-
resize_window_screen(x,y)
|
80
|
-
end
|
81
|
-
|
82
|
-
And /I verify object "(.*)" with "(.*)" has value "(.*)"/ do |object,style,expected_value|
|
83
|
-
actual_value = get_computed_style(object,style)
|
84
|
-
IFD_Assertion.assert_string_equal(expected_value,actual_value)
|
85
|
-
end
|
86
|
-
|
87
|
-
Then /^I should( not)? see page title as (.*)$/ do |present, title|
|
88
|
-
check_title(title, present.empty?)
|
89
|
-
end
|