robotest 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CONTRIBUTING.md +93 -0
- data/Full_Suite/Gemfile +16 -0
- data/Full_Suite/README.md +12 -0
- data/Full_Suite/Rakefile +9 -0
- data/Full_Suite/conf/account_credentials.yml +2 -0
- data/Full_Suite/libraries/constants.rb +25 -0
- data/Full_Suite/libraries/dsl.rb +52 -0
- data/Full_Suite/locators/testpage.rb +27 -0
- data/Full_Suite/pages/testpage.rb +31 -0
- data/Full_Suite/rake-jobs/rake_jobs.rb +9 -0
- data/Full_Suite/rspec_parallel +6 -0
- data/Full_Suite/spec/spec_helper.rb +84 -0
- data/Full_Suite/spec/test_spec.rb +130 -0
- data/Full_Suite/spec/test_spec_copy.rb +131 -0
- data/Full_Suite/spec/test_spec_copy_2.rb +131 -0
- data/Full_Suite/spec/test_spec_copy_3.rb +131 -0
- data/Full_Suite/test-data/attachments/attachment_test.yml +0 -0
- data/Full_Suite/test-data/credentials/test_credentials.conf +2 -0
- data/Full_Suite/yaml/test.yml +38 -0
- data/Full_Suite/yaml/test_parallel.yml +45 -0
- data/LICENSE +674 -0
- data/README.md +207 -0
- data/Rakefile +1 -0
- data/bin/robotest +5 -0
- data/lib/robotest.rb +258 -0
- data/lib/robotest/RoboTest.png +0 -0
- data/lib/robotest/driver.rb +355 -0
- data/lib/robotest/dsl.rb +69 -0
- data/lib/robotest/locator.rb +204 -0
- data/lib/robotest/multilocator.rb +82 -0
- data/lib/robotest/version.rb +3 -0
- data/lib/robotest/wait.rb +75 -0
- data/lib/tasks/robotest.rake +6 -0
- data/robotest.gemspec +62 -0
- metadata +281 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cd392de1a562f67f155ce7619bc89a55298d1304e31b579acd27dac9f1566be9
|
4
|
+
data.tar.gz: cbad2a416a4827362da5a6922d2c00ffd1d63bbd46345877e4d9e29507ca5981
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 64f9d1454edb569d0b796cddf4ad17ea1c58c290abee9e73ea4f4fe19b4861ccb10b861cb6f13d51da5dd7382db4f41f2a16812faffb23fc52a85f164dcf8b02
|
7
|
+
data.tar.gz: 8f5165f6531a6d5bb61d5b9e08fbb2d086f67d3629af7c0adfa3dace3c40bad1c248878d4da6db4d510e13b0292060d17ec5898ed3fa8728c7910e5be70e70f3
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
When contributing to this repository, please first discuss the change you wish to make via issue,
|
4
|
+
email, or any other method with the owners of this repository before making a change.
|
5
|
+
|
6
|
+
Please note we have a code of conduct, please follow it in all your interactions with the project.
|
7
|
+
|
8
|
+
## Pull Request Process
|
9
|
+
|
10
|
+
1. Ensure any install or build dependencies are removed before the end of the layer when doing a
|
11
|
+
build.
|
12
|
+
2. Update the README.md with details of changes to the interface, this includes new environment
|
13
|
+
variables, exposed ports, useful file locations and container parameters.
|
14
|
+
3. Increase the version numbers in any examples files and the README.md to the new version that this
|
15
|
+
Pull Request would represent.
|
16
|
+
4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you
|
17
|
+
do not have permission to do that, you may request the second reviewer to merge it for you.
|
18
|
+
|
19
|
+
## Code of Conduct
|
20
|
+
|
21
|
+
### Our Pledge
|
22
|
+
|
23
|
+
In the interest of fostering an open and welcoming environment, we as
|
24
|
+
contributors and maintainers pledge to making participation in our project and
|
25
|
+
our community a harassment-free experience for everyone, regardless of age, body
|
26
|
+
size, disability, ethnicity, gender identity and expression, level of experience,
|
27
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
28
|
+
orientation.
|
29
|
+
|
30
|
+
### Our Standards
|
31
|
+
|
32
|
+
Examples of behavior that contributes to creating a positive environment
|
33
|
+
include:
|
34
|
+
|
35
|
+
* Using welcoming and inclusive language
|
36
|
+
* Being respectful of differing viewpoints and experiences
|
37
|
+
* Gracefully accepting constructive criticism
|
38
|
+
* Focusing on what is best for the community
|
39
|
+
* Showing empathy towards other community members
|
40
|
+
|
41
|
+
Examples of unacceptable behavior by participants include:
|
42
|
+
|
43
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
44
|
+
advances
|
45
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
46
|
+
* Public or private harassment
|
47
|
+
* Publishing others' private information, such as a physical or electronic
|
48
|
+
address, without explicit permission
|
49
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
50
|
+
professional setting
|
51
|
+
|
52
|
+
### Our Responsibilities
|
53
|
+
|
54
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
55
|
+
behavior and are expected to take appropriate and fair corrective action in
|
56
|
+
response to any instances of unacceptable behavior.
|
57
|
+
|
58
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
59
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
60
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
61
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
62
|
+
threatening, offensive, or harmful.
|
63
|
+
|
64
|
+
### Scope
|
65
|
+
|
66
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
67
|
+
when an individual is representing the project or its community. Examples of
|
68
|
+
representing a project or community include using an official project e-mail
|
69
|
+
address, posting via an official social media account, or acting as an appointed
|
70
|
+
representative at an online or offline event. Representation of a project may be
|
71
|
+
further defined and clarified by project maintainers.
|
72
|
+
|
73
|
+
### Enforcement
|
74
|
+
|
75
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
76
|
+
reported by contacting me at [nareshnavinash@gmail.com]. All
|
77
|
+
complaints will be reviewed and investigated and will result in a response that
|
78
|
+
is deemed necessary and appropriate to the circumstances. The project member has
|
79
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
80
|
+
Further details of specific enforcement policies may be posted separately.
|
81
|
+
|
82
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
83
|
+
faith may face temporary or permanent repercussions as determined by other
|
84
|
+
members of the project's leadership.
|
85
|
+
|
86
|
+
### Attribution
|
87
|
+
|
88
|
+
|
89
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
90
|
+
available at [http://contributor-covenant.org/version/1/4][version]
|
91
|
+
|
92
|
+
[homepage]: http://contributor-covenant.org
|
93
|
+
[version]: http://contributor-covenant.org/version/1/4/
|
data/Full_Suite/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'robotest'
|
4
|
+
gem 'selenium-webdriver'
|
5
|
+
gem 'rspec'
|
6
|
+
gem 'rspec-expectations'
|
7
|
+
gem 'rake'
|
8
|
+
gem 'headless'
|
9
|
+
gem 'pry'
|
10
|
+
gem 'require_all'
|
11
|
+
gem 'allure-rspec'
|
12
|
+
gem 'yaml_extend'
|
13
|
+
gem 'parallel_tests'
|
14
|
+
gem 'progress_bar'
|
15
|
+
gem 'coderay'
|
16
|
+
gem 'activesupport'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
RoboTest is built over rspec, parallel_tests and allure.
|
2
|
+
1. Install Sublime, Atom, Code or Xcode based on your preference
|
3
|
+
2. Install homebrew from http://brew.sh/
|
4
|
+
3. Install ruby and rvm with `brew install ruby` and `curl -sSL https://get.rvm.io | bash -s stable --ruby`
|
5
|
+
4. Install chrome driver using `brew cask install chromedriver`
|
6
|
+
5. For sample project run `robotest example` and move to that directory in the command prompt
|
7
|
+
6. Now Make sure to rename the project name from `Full_Suite` to your `Custom Name`
|
8
|
+
7. Rename the file `rspec_parallel` in Full_Suite/ folder to `.rspec_parallel` to get the console logs while running the scripts !!!
|
9
|
+
8. To test a sample run with single process try running `robotest yaml/test.yml`
|
10
|
+
9. To test a sample run with multiple process try running `robotest yaml/test_parallel.yml`
|
11
|
+
10. You can specify the additional parameters as follows,\n> robotest yaml/test.yml -t sanity||true
|
12
|
+
Here test cases with sanity tag alone will run
|
data/Full_Suite/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Constants
|
2
|
+
|
3
|
+
attr_accessor :BASE_URL
|
4
|
+
attr_accessor :BASE_URL_FOR_ACCOUNTS
|
5
|
+
attr_accessor :COMMON_EMAIL
|
6
|
+
attr_accessor :COMMON_PASSWORD
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
account_conf = ParseConfig.new("#{__dir__}/../test-data/credentials/test_credentials.conf")
|
10
|
+
conf_data = account_conf.params
|
11
|
+
|
12
|
+
@BASE_URL_FOR_ACCOUNTS = $conf["base_urls"]
|
13
|
+
@PARALLEL_TESTS = $conf["parallel_process"]
|
14
|
+
if $conf["base_urls"] != nil
|
15
|
+
if @PARALLEL_TESTS != nil
|
16
|
+
@BASE_URL = @BASE_URL_FOR_ACCOUNTS[0]
|
17
|
+
else
|
18
|
+
@BASE_URL = $conf["mode"] == 'parallel' ? @BASE_URL_FOR_ACCOUNTS[ENV[:TEST_ENV_NUMBER.to_s].to_i - 1] : @BASE_URL_FOR_ACCOUNTS[0]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
@COMMON_EMAIL = conf_data["common_email"]
|
23
|
+
@COMMON_PASSWORD = conf_data["common_password"]
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module AllureRSpec
|
2
|
+
module DSL
|
3
|
+
module Example
|
4
|
+
|
5
|
+
@@step_count = 0
|
6
|
+
@@current_example_location = nil
|
7
|
+
|
8
|
+
def step(step, *tags, &block)
|
9
|
+
__increment_step_count
|
10
|
+
metadata[:step_group] ||= {}
|
11
|
+
tags = tags[0].nil? ? {} : tags[0]
|
12
|
+
metadata[:step_group][@@step_count] = tags
|
13
|
+
metadata[:step_name] = step
|
14
|
+
test_case_name = metadata[:description]
|
15
|
+
|
16
|
+
suite = __description(metadata[:example_group])
|
17
|
+
test = __description(metadata)
|
18
|
+
begin
|
19
|
+
AllureRubyAdaptorApi::Builder.start_step(suite, test, step)
|
20
|
+
__with_step step, &block
|
21
|
+
puts "#{suite} - #{test_case_name} - #{step} - Passed"
|
22
|
+
__set_step_status('passed')
|
23
|
+
AllureRubyAdaptorApi::Builder.stop_step(suite, test, step)
|
24
|
+
rescue Exception => e
|
25
|
+
__set_step_status('failed')
|
26
|
+
puts "#{suite} - #{test_case_name} - #{step} - Failed"
|
27
|
+
AllureRubyAdaptorApi::Builder.stop_step(suite, test, step, :failed)
|
28
|
+
raise e
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def __increment_step_count
|
35
|
+
if @@current_example_location != metadata[:location]
|
36
|
+
__reset_step_count
|
37
|
+
@@current_example_location = metadata[:location]
|
38
|
+
else
|
39
|
+
@@step_count += 1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def __reset_step_count
|
44
|
+
@@step_count = 0
|
45
|
+
end
|
46
|
+
|
47
|
+
def __set_step_status(status)
|
48
|
+
metadata[:step_group][@@step_count][:status] = status
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Locators
|
2
|
+
class TestPage
|
3
|
+
|
4
|
+
# All the Locators in the initialize block need to be declared here for read write permission.
|
5
|
+
attr_accessor :EMAIL_TEXTBOX
|
6
|
+
attr_accessor :PASSWORD_TEXTBOX
|
7
|
+
attr_accessor :LOGIN_LINK
|
8
|
+
attr_accessor :LOGIN_BUTTON
|
9
|
+
attr_accessor :SUBMIT_BUTTON
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
|
13
|
+
# Locators can be declared here by mentioning {how?(xpath,css,id) and what?(identifier)}
|
14
|
+
@EMAIL_TEXTBOX = Locator.new(:id, "")
|
15
|
+
@PASSWORD_TEXTBOX = Locator.new(:xpath, "")
|
16
|
+
@LOGIN_LINK = Locator.new(:link, "Login")
|
17
|
+
@LOGIN_BUTTON = Locator.new(:css, "")
|
18
|
+
@SUBMIT_BUTTON = Locator.new(:css, "")
|
19
|
+
end
|
20
|
+
|
21
|
+
# Dynamic locators can be declared here as a seperate method (This method doesnot need to be declared with attr_accessor)
|
22
|
+
def LOGIN_DYNAMIC(variable)
|
23
|
+
@LOGIN_DYNAMIC = Locator.new(:xpath,"//*[text()=#{variable}]")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Pages
|
2
|
+
class TestPage < Locators::TestPage
|
3
|
+
|
4
|
+
def initialize(driver)
|
5
|
+
super()
|
6
|
+
@driver = driver
|
7
|
+
end
|
8
|
+
|
9
|
+
def login(email, password, base_url = nil)
|
10
|
+
$focus_driver = @driver
|
11
|
+
|
12
|
+
#To navigate to the given url,
|
13
|
+
# @driver.get(base_url)
|
14
|
+
|
15
|
+
# Normal locators has to be used with the @
|
16
|
+
@LOGIN_LINK.is_present?
|
17
|
+
|
18
|
+
#Dynamic locators has to be declared without @
|
19
|
+
LOGIN_DYNAMIC("Login").is_present?
|
20
|
+
|
21
|
+
# Conditions can be used for a locator
|
22
|
+
if @EMAIL_TEXTBOX.is_present?
|
23
|
+
@EMAIL_TEXTBOX.clear_and_send_keys(email)
|
24
|
+
@PASSWORD_TEXTBOX.clear_and_send_keys(password)
|
25
|
+
@LOGIN_BUTTON.click
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
--color
|
2
|
+
--format RspecJunitFormatter --out reports/junit/report_<%= ENV['TEST_ENV_NUMBER'] %>.xml
|
3
|
+
--format html --out reports/html/report_<%= ENV['TEST_ENV_NUMBER'] %>.html
|
4
|
+
--format json --out reports/json/report_<%= ENV['TEST_ENV_NUMBER'] %>.json
|
5
|
+
--format Fuubar --out reports/fuubar/report_<%= ENV['TEST_ENV_NUMBER'] %>.txt
|
6
|
+
--format progress
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'robotest'
|
2
|
+
require 'require_all'
|
3
|
+
require 'allure-rspec'
|
4
|
+
require 'pathname'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'headless'
|
7
|
+
require 'os'
|
8
|
+
require "pry"
|
9
|
+
require_rel "../locators/"
|
10
|
+
require_rel "../libraries/"
|
11
|
+
require_rel "../pages/"
|
12
|
+
require "time"
|
13
|
+
require "fileutils"
|
14
|
+
require 'uri'
|
15
|
+
require 'active_support/time'
|
16
|
+
require 'parseconfig'
|
17
|
+
include RoboTest
|
18
|
+
|
19
|
+
$conf = File.exist?('_robotest.yml') ? YAML.load_file('_robotest.yml') : raise "yaml file needs to be given as a input parameter"
|
20
|
+
FileUtils.mkdir_p("#{Pathname.pwd}/#{$conf['screenshot_location']}")
|
21
|
+
$browser = $conf['browser']
|
22
|
+
|
23
|
+
if OS.mac?
|
24
|
+
$conf["switches"].delete("headless") if $conf["switches"]
|
25
|
+
end
|
26
|
+
|
27
|
+
RSpec.configure do |config|
|
28
|
+
config.filter_run_when_matching :focus
|
29
|
+
config.example_status_persistence_file_path = "reports/examples.txt"
|
30
|
+
config.include AllureRSpec::Adaptor
|
31
|
+
end
|
32
|
+
|
33
|
+
AllureRSpec.configure do |config|
|
34
|
+
config.output_dir = "reports/allure"
|
35
|
+
config.clean_dir = true
|
36
|
+
config.logging_level = Logger::WARN
|
37
|
+
end
|
38
|
+
|
39
|
+
RSpec.configure do |c|
|
40
|
+
|
41
|
+
# To take screen shots of all the drivers when there is a failure
|
42
|
+
c.after(:each) do |example|
|
43
|
+
unless example.exception.nil?
|
44
|
+
begin
|
45
|
+
drivers = Driver.get_all_drivers
|
46
|
+
drivers.each do |l,m|
|
47
|
+
example.attach_file(m,l.save_screenshot)
|
48
|
+
end
|
49
|
+
rescue Exception => e
|
50
|
+
puts example.message
|
51
|
+
puts example.backtrace
|
52
|
+
end
|
53
|
+
end
|
54
|
+
puts "Runs after each in spec helper"
|
55
|
+
end
|
56
|
+
|
57
|
+
# To quit all the drivers after all the test cases are run.
|
58
|
+
c.after(:all) do |example|
|
59
|
+
Driver.quit_all_drivers
|
60
|
+
puts "Runs after all in spec helper"
|
61
|
+
end
|
62
|
+
|
63
|
+
# steps to be added which has to be run before all block (Common throughout the project)
|
64
|
+
c.before(:all) do |example|
|
65
|
+
puts "Runs before all in spec helper"
|
66
|
+
end
|
67
|
+
|
68
|
+
# steps to be added which has to be run before each block (Common throughout the project)
|
69
|
+
c.before(:each) do |example|
|
70
|
+
puts "#{example.metadata[:example_group][:description]} - #{example.metadata[:description]} - Started"
|
71
|
+
puts "Runs before each in spec helper"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Following is the order in which the before and after blocks are run
|
75
|
+
# Runs before all in spec helper
|
76
|
+
# Runs before all in spec
|
77
|
+
# Runs before each in spec helper
|
78
|
+
# Runs before each in spec
|
79
|
+
# Runs after each in spec
|
80
|
+
# Runs after each in spec helper
|
81
|
+
# Runs after all in spec
|
82
|
+
# Runs after all in spec helper
|
83
|
+
end
|
84
|
+
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# to require all the related gems and functionalities to this spec we need to give this in every spec file.
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
# Give a unique name in describe so that allure report will be created seperately.
|
5
|
+
# Note: If two spec has same name, allure will override the results of first spec with the second spec which has same name.
|
6
|
+
describe "Test Spec" do
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
# Initialize all the constants here.
|
10
|
+
|
11
|
+
# Initialize a driver with a name, so that when there is a bug screen shots will be saved with the name.
|
12
|
+
# Multiple drivers can be initialized (with different properties, check driver.rb file in the gem for details)
|
13
|
+
# We can initialize one chrome, one firefox, one explorer, one safari browser at a time.
|
14
|
+
@driver1 = Driver.new("Test_Driver_1")
|
15
|
+
@driver2 = Driver.new("Test_Driver_2")
|
16
|
+
@driver3 = Driver.new("Test_Driver_3")
|
17
|
+
@driver4 = Driver.new("Test_Driver_4")
|
18
|
+
|
19
|
+
# To load the constants file from Constants class.
|
20
|
+
@constants = Constants.new
|
21
|
+
|
22
|
+
# Initialize the page class with the driver.
|
23
|
+
# Each instance method will be corresponding to the driver with which it is declared.
|
24
|
+
# New pages can be added and used in the same way
|
25
|
+
@driver1_login_page = Pages::TestPage.new(@driver1)
|
26
|
+
@driver2_login_page = Pages::TestPage.new(@driver2)
|
27
|
+
@driver3_login_page = Pages::TestPage.new(@driver3)
|
28
|
+
@driver4_login_page = Pages::TestPage.new(@driver4)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
before(:each) do
|
33
|
+
# any specfic steps that needs to be done before each testcase can be done here
|
34
|
+
# Example : Moving to the home page after all the test case will be an idle one.
|
35
|
+
end
|
36
|
+
|
37
|
+
after(:all) do
|
38
|
+
# Steps that is to be run after all the test cases are done can be given here.
|
39
|
+
# Usual steps will be quiting all the drivers, but that is handled in the spec_helper.rb so any other specific steps other than quit can be given here.
|
40
|
+
end
|
41
|
+
|
42
|
+
after(:each) do |e|
|
43
|
+
# any specfic steps that needs to be done after each testcase can be done here
|
44
|
+
# Usually taking screen shots after each test case when there is a failure is done here, but that is covered in spec_helper.rb
|
45
|
+
# Any other steps than taking screenshot can be given here.
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# Each test case can be declared with `it`
|
50
|
+
# after the test case name is defined we can define the tags for that test case
|
51
|
+
# These tags can be used to run only critical test cases, only sanity test cases or we can use the testId for any custom reporting.
|
52
|
+
it 'this test will pass',:severity => "critical", :sanity => true, :testId => '001' do |e|
|
53
|
+
# for more help on rspec expect statements you can visit the following website
|
54
|
+
# https://relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
|
55
|
+
|
56
|
+
# e.step is used by allure for reporting purpose. It is best to have all the lines inside any one of the e.step so that we can have a detailed reporting
|
57
|
+
e.step "true eql true" do
|
58
|
+
expect(true).to eq true
|
59
|
+
end
|
60
|
+
e.step "false eql false" do
|
61
|
+
expect(false).to eq false
|
62
|
+
end
|
63
|
+
e.step "string eql string" do
|
64
|
+
expect("test").to eq "test"
|
65
|
+
end
|
66
|
+
e.step "number eql number" do
|
67
|
+
expect(1).to eq 1
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
it "this test will fail", :severity => "critical", :testId => '002' do |e|
|
72
|
+
e.step "true eql true" do
|
73
|
+
expect(true).to eq true
|
74
|
+
end
|
75
|
+
e.step "false eql false" do
|
76
|
+
expect(false).to eq false
|
77
|
+
end
|
78
|
+
# Test case will fail in the below step
|
79
|
+
e.step "true eql false" do
|
80
|
+
expect(true).to eq false
|
81
|
+
end
|
82
|
+
# Since the above step is failed, following steps will not be executed.
|
83
|
+
e.step "true eql true" do
|
84
|
+
expect(true).to eq true
|
85
|
+
end
|
86
|
+
e.step "false eql false" do
|
87
|
+
expect(false).to eq false
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "this test will fail", :severity => "critical", :testId => '003' do |e|
|
92
|
+
e.step "true eql true" do
|
93
|
+
expect(true).to eq true
|
94
|
+
end
|
95
|
+
e.step "false eql false" do
|
96
|
+
expect(false).to eq false
|
97
|
+
end
|
98
|
+
# Test case will fail in the below step
|
99
|
+
# cstep is the custom method in which if a step fails it wont stop the test case
|
100
|
+
# this cstep can be used to validate data in a page, if we need to test and report 10 variables in a page, then we can use this so that all the validation point steps even if one step is failed
|
101
|
+
e.cstep "1 equal 2" do
|
102
|
+
expect(1).to eq 2
|
103
|
+
end
|
104
|
+
# even if the the above step is failed, following steps will be executed.
|
105
|
+
e.step "true eql true" do
|
106
|
+
expect(true).to eq true
|
107
|
+
end
|
108
|
+
e.step "false eql false" do
|
109
|
+
expect(false).to eq false
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'Calling a function in a `Page` and `Object` from the spec file',:severity => "critical", :testId => '004' do |e|
|
114
|
+
# we can call a funtion in the pages in the following ways
|
115
|
+
e.step "Login to the application" do
|
116
|
+
@driver1_login_page.login(@constants.COMMON_EMAIL, @constants.COMMON_PASSWORD, @constants.BASE_URL)
|
117
|
+
Pages::TestPage.new(@driver2).login(@constants.COMMON_EMAIL, @constants.COMMON_PASSWORD, @constants.BASE_URL)
|
118
|
+
end
|
119
|
+
|
120
|
+
# we can call a locator with the page instance itself as follows,
|
121
|
+
e.step "Is login link is present" do
|
122
|
+
expect(@driver1_login_page.LOGIN_LINK.is_present?).to eql false
|
123
|
+
expect(@driver1_login_page.LOGIN_DYNAMIC("Login").is_present?).to eql false
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
end
|