Does Selenium support passing a range of input values?
I did some Selenium training a few years ago and seem to recall there was a feature that allowed you to pass a table of values to a testcase. I can't recall the details, and can't find any reference to it in the docs? I could have been dreaming! My general recollection was that you could pass something like;
FirstName | Lastname
Bob | Smith
Andy | Franks
And somehow make this data the subject of the test.
Given what you show in your question I'm thinking what you are remembering is something like:
Scenario: fooing the bar
Given some data
When the user foos the bar
Then the bar shows
| FirstName | Lastname |
| Bob | Smith |
| Andy | Franks |
That's the Gherkin language. Test runners that understand Gherkin exist for most general purpose languages. The table in the last step is something that the test runner will pass to the implementation of the step. You have to write the implementation of the step yourself and are responsible for passing the data to Selenium in a format that Selenium understands. How you do this depends on the specific test you are trying to perform with Selenium.
Related
first feature file
Feature: CRMSmokeTest
In order to make sure that CRM Key functionalities working as expected.
Background:
Given I have entered the CRM URL
Scenario Outline:Quick Search using AccountID
Given AccountID is selected in The Quick Search
When user enter the <AccountID> in search field
And Click on Quick Search button
And Close the Alerts
Then Title of the page contains <AccountID>
Examples:
| AccountID |
| 116999 |
Second Feature File
Feature: CRM Ticket Open, Add and Amend
In order to verify thay user able to open and amend existing ticket
Also to verify that user is able to create a new Ticket
Background:
Given I have entered the CRM URL
And AccountID is selected in The Quick Search
#mytag
Scenario Outline: Add a new Ticket
When user enter the <AccountID> in search field
And Click on Quick Search button
And Close the Alerts
Then Title of the page contains <AccountID>
When User click on Add New link on Ticket Section
And Select the <Departmnet> and <SubTeam> from the list
And Enter the <Subject> of the ticket
And Select the <Product>
And Select the <TicketCategory> and <TicketSubCategory>
And Enter the <Comments> and <PersonSpokeTo>
And Click on Finish
Then A new Ticket is created
Examples:
| AccountID | Department | SubTeam | Subject | Product | TicketCategory | TicketSubCategory | Comments |
| 116999 | Customer Services | ContractEnquiry | Test Ticket | Home Insurance | Account Management | Customer Zone | Test Comments |
I would like to use the Scenario in my first feature file as the prereq of my scenario in second feature file.
What is the best practice to so
Also When filling a big data form what is the best approach to write scenario. The way I have written the scenario in second feature file is the only approach or we can write this better way?
Calling a different scenario because it satisfies the prerequisites of the current scenario breaks the isolation required to make each scenario runnable on its own. No scenario should rely on any other scenario.
Instead of copying and pasting the steps from the first scenario, write a short Given step that performs the same things as the first scenario.
Judging on the scenario title, create a Given step similar to:
Scenario Outline: Add a new Ticket
# New 'Given' step that basically does the same thing as scenario #1
Given user performed a quick search for account <AccountID>
# Now continue on with the rest of the scenario
When User click on Add New link on Ticket Section
And Select the <Departmnet> and <SubTeam> from the list
And Enter the <Subject> of the ticket
And Select the <Product>
And Select the <TicketCategory> and <TicketSubCategory>
And Enter the <Comments> and <PersonSpokeTo>
And Click on Finish
Then A new Ticket is created
Examples:
| AccountID | Department | SubTeam | Subject | Product | TicketCategory | TicketSubCategory | Comments |
| 116999 | Customer Services | ContractEnquiry | Test Ticket | Home Insurance | Account Management | Customer Zone | Test Comments |
The implementation of this step will depend on the architecture of your tests, but the step should:
Go to the CRM URL
Select AccountId in the quick search
Enter the given Account Id in the search box
Click the quick search button
Close the alerts when the show up
If you find yourself writing code that seems to exist in your other steps consider refactoring your code into Page Models, and then initializing those page models and calling methods on them from your step definitions. The basic control flow of your test will go:
Feature file --> Step definition --> Page model --> Selenium --> Web browser
Suppose I have test scenario with exact same requirements but one path variable change as follows:
Scenario: Some scenario
Given path /mypath/param1
When method get
Then status 200
I need to run the same test for /mypath/param2, /mypath/param3 as well.
Is there a simpler way to do it without requiring to separate the feature into a separate file and using data driven test?
Yes, use the Scenario Outline which is a standard Cucumber pattern.
Scenario Outline: Some scenario
Given path /mypath/<param>
When method get
Then status 200
Examples:
| param |
| foo |
| bar |
Can anyone help me to find solution for the below use case:
Currently I am working on Selenium Automation using Cucumber and I have the below Issue.
I need to automate scenario in web application.
Scenario Outline
Login as "<User>" and purchase items and checkout by selecting "<Option>".
Examples:
|User|
|Arun|
|Ajay|
|Ashok|
Examples
|Option|
|one|
|two|
|Three|
Here the I need to see 9 times running the same scenario till (option 3) for each user.
I mean When Arun login he should checkout and select option one (EG: he place an order without description entered) and then again Arun should login and should checkout and select option two (this time he enters the description and place an order) and then again arun login as select option 3 (EG: Enters description and selects some checkbox and place an order).
This need to repeated for Ajay and Ashok as well. How do I achieve this in Cucumber. Can I use Multiple Examples for single Scenario Outline.
Or Is it possible to have Examples in Background.
This is one of the important use case I need to automate and been trying out with various options in Cucumber. But nothing works.
Thanks in Advance
You can write the scenario outline as given below. it may be useful.
Scenario Outline: Login as <user> and Purchase item with the option <option>
When I login as <user>
And I enter the description <description>
And I checkout the item using the option <option>
Examples:
|user|description|option|
|Arun |Some Desc|One |
|Arun | |One |
|Arun |Some Desc|two |
|Ajay | |three|
|Ajay |Some Desc|two |
|Ajay |Some Desc|three|
|Ashok| |One |
|Ashok|Some Desc|two |
|Ashok|Some Desc|three|
This will run all the steps with different user, description and options.
An idea would be something like this:
Scenario Outline: Login with purchase and checkout
Given I am on the login page
When I log in as "<User>"
And I purchase items
Then I can checkout using the "<Option>"
Examples:
| User | Option |
| Arun | one |
| Arun | two |
| Arun | three |
| Ajay | one |
| Ajay | two |
| Ajay | three |
| Ashok| one |
| Ashok| two |
| Ashok| three |
This will run each option for each user. I don't know how your code looks, but using the above format should be easy to adapt. Check out the documentation as well as how to write good Gherkin
Your step, and the Scenario Outline seem to be doing too much.
If the users have expressly different permissions, or the method of getting to the checkout changes for each of the 3 users, then of course, 9 scenarios may be necessary for the test, if not however, you may only have to write 3 scenarios to test this.
The way I would write this test:
Background:
Given I am logged in as "Arun"
And I have gone to the checkout after selecting various products
When I purchase the items
Scenario Outline: Checkout descriptions
Then I should be able to checkout <with?> a description
Examples:
| with? |
| with |
| without |
Scenario: Checkout with description and accept the terms of service*
Then I should be able to checkout with a description
And I should be able to accept the terms of service*
* Replace "accept the terms of service" with the meaning behind your selecting of the check boxes.
Gherkin is there to bridge the conversational gap between the development team and the business, so making sure that the language used is understandable by a non-technical business person is essential. Leave implementation details out of the feature file, as it is all about describing how the system behaves.
Edit
If there is real business benefit in running the test across the 2 other users (and it isn't solely being run to set up test data, which should be done in a before hook), then perhaps you would need to do something more like this:
Scenario Outline: Checkout descriptions
Given I am logged in as "<user>"
And I have gone to the checkout after selecting various products
When I purchase the items
Then I should be able to checkout <with?> a description
Examples:
| user | with? |
| Arun | with |
| Ajay | with |
| Ashok | with |
| Arun | without |
| Ajay | without |
| Ashok | without |
Scenario Outline: Checkout with description and accept the terms of service*
Given I am logged in as "<user>"
And I have gone to the checkout after selecting various products
When I purchase the items
Then I should be able to checkout with a description
And I should be able to accept the terms of service*
Examples:
| user |
| Arun |
| Ajay |
| Ashok |
Can I use scenario outline concept in scenario name in Specflow so that I pass the scenario name in Example. For example if I want to run my scenario in three browsers IE, FF and chrome, I'll pass three examples.
I have tried it in Cucumber and it works, can I do it with Specflow in VS ?
Like
Scenario outline : <Scenario name>
steps 1
step 2
Examples:
|Scenario name|
|scenario 1 |
|scenario 2 |
|scenario 3 |
can I implement that ?
I'm sure this is basic as I'm a new Rails user and want to do Cucumber right. I spent the weekend reading the Pragmatic book and have a small project I want to create and use it. I intentionally set up my first feature as broadly as possible so that it wouldn't be brittle depending too much on how it works on the rails side. I created a new rails app using DanielKehoe's starter on github. I think I got the user figured out. But when I attempt to use Cucumber to creating my first table of Reference Units which would be a table of constants, I expected that cucumber would drive me to create a Reference Units model but I spent all morning trying to get it to do so using the book, Railscasts and stackoverflow to push me to where I'm at now. I went ahead and generated a model for Reference Units, controller with a new action and an empty view. But it now cannot figure out that I have Reference Unit model with a (LoadError). Odd because it's there in the app.
Here's my current feature:
Feature: I want to have Reference Units that I can refer to so they can be used elsewhere. That way
they can be updated in one place. I want to create and edit these Units.
Background:
Given I am logged in as the following user:
| name | "Testy McUserton" |
| password | "please" |
| email | "testy#userton.com" |
Scenario: Adding Reference Units
When I go to the new Reference Units page
And I fill in the following:
| commodity | "corn" |
| language | "en" |
| wholesale unit | "xton" |
| retail unit | "xliter" |
| receipt unit | "dollar" |
Then it should create a new Reference Unit
here is my step definition:
Given /^I am logged in as the following user:$/ do |table|
sign_up valid_user
end
When /^I go to the new Reference Units page$/ do
visit new_reference_unit_path
end
When /^I fill in the following:$/ do |table|
#reference_unit = Reference_unit.create!(table.rows_hash)
end
Then /^it should create a new Reference Unit$/ do
pending # express the regexp above with the code you wish you had
end
new_reference_unit_path is in my feature/support/paths.rb as:
when /the new Reference Units page/
'/reference_units/new'
Running this in 3.1.3 the following is in red:
Scenario: Adding Reference Units # features/user_can_create_units.feature:10
When I go to the new Reference Units page # features/step_definitions/user_create_unit_reference.rb:6
Expected /Users/sam/apps/keriakoo/app/models/reference_unit.rb to define Reference_unit (LoadError)
./app/controllers/reference_units_controller.rb:4:in `new'
./features/step_definitions/user_create_unit_reference.rb:7:in `/^I go to the new Reference Units page$/'
features/user_can_create_units.feature:11:in `When I go to the new Reference Units page'
As I mentioned above. the reference_unit.rb file is in the correct place. Of course, I haven't added any methods or attributes to it expecting cucumber to guide me at the right time. I'm sure it's something simple, but I tried all kinds of combinations of words and capitalization to shake something loose, sam
OK, I think I hit on the clue. Digging around, I used the --backtrace option on cucumber and it pointed me to a dependency with a key word of "const". OK, it doesn't like something in the text. Looking around for info on two-word models, I can tell that my model was correct: ReferenceUnit. But looking at my error output, it was looking for Reference_unit. So for laughs I altered the regex for that step to be "When /^I go to the new Reference units page$" the error went away. So the syntax of the first line is important, and not 'freestylin' as I suspected.