Can we use scenario outline for background steps - background

I am using POM with cucumber. I have 3 scenarios to execute where half of the steps are common for all the scenarios. So I am using background keyword for common steps. But I need to pass data through Example keyword to the steps defined in Background as well. How do I do it?
Below is my background
Given User is on login Screen
When user enters "<User_ID>" and "<Password>"
Then verify successfull login
When user clicks on search button
And search by "<reference_number>"
Examples:
| User_ID | Password |reference number |
| Abc | XYZ |ABC123 |

You are not able to pass example data from a scenario outline to the background. You will need to include those parameterized steps in the scenario outline rather than the background. If one step depends on another, they are probably stuck repeating steps in each scenario.

Related

Cucumber: loop over only part of the Scenario

is there any possibility to loop part of the scenario instead of all steps.
Below I have prepared an example, I want to login and click a list of links, but I want to execute the login-part only once. After logging the clicking part should be looped.
Scenario Outline
Given I am on Homepage
When I enter Email and Password and press send
And I am logged in
*And I click the link <link>
Examples:
| link1 |
| link2 |
| link3 |
| link4 |*
You should split your scenario in that case. Make the login as a scenario, do not close your driver in between scenarios. Now make the I click the link as a scenario outline in the same feature file.

testng-opening multiple browsers for scenario examples

I have this feature file
Scenario Outline:
Given User is on my website
When User is Admin or Mastering Editor
3.And User is on /page/ page
4.And User click /header/ link
5.Then User should be taken to /target page/
Examples: Of page, header and target
| page | header | target page |
| Homepage | Master | Master page |
| Homepage | Translation | Translation page |
For "Given User is on my website"
I wrote the login details, and this is opening new browser for every example in scenario.
I want single browser to open and do all examples.
can anyone help please
Follow these steps:
Create one driver class with initialization, closing and some common driver related methods
Create your step definition file with extends this driver class.
Create before class method to initialize the driver
every step will be using the same opened browser
so every feature file one browser will be initialized.
public class PersonSteps extends DriverHelper

How to use data table in background in cucumber

I want to execute common steps for few test cases.below are the common steps.But in background,since i cannot use Scenario Outline,what is the alternate?
Background:To test employee id search
Scenario Outline:
Given I am on login Screen
When I enter credentials "<User_ID>" and "<Password>"
When I clicks on search button
And search by "<Employee_id>"
Examples:
|User_ID|Password |Employee_id|
|Admin |Password | Q58ewQ |
A scenario outline is a way to run several scenarios whilst writing just a single scenario. Background is a set of steps to run before each scenario. You can't put an outline in a background, it makes no sense.
A Background is used for steps that will be run before each Scenario (or Example) in the feature file.
Each Scenario Outline will run as a separate Scenario / Example.
You cannot use Scenario Outline inside a Background, as that would make no sense.
Please check the links to the documentation for more information.
This is example is very imperative, BDD need to be declarative. Best Pratices BDD
Why do you create one method that do login.
Login(username, password){
set username = username;
set password = password;
clickButton;
}
And create one step.
Given the user logged on the system
login(username, password)
This is step do you use with background.
You can use Data Table in Cucumber Background :
Background:
Given User is on Home Page
When User Navigate to LogIn Page
And User enters Credentials to LogIn
| testuser_1 | Test#153 |
You can use a table in Cucumber Background:
Background:
Given I open Google's search page
When I use the following keywords to search in the Google's search page:
| CucumberBDD |
| CucumberHooks |

How to write scenario to verlify a list of values displayed?

How to write a gherkin scenario in which the user clicks on a menu button and he should see a list of sub-menus displayed.I tried:
Scenario Outline:Display of the login page
Given User is an admin
When user clicks on the menu
Then he should see the <list> displayed
Examples:
| list |
| loginform, UsernameField, PasswordField |
Your description of the scenario and the scenario itself contradict each other. You write about sub-menus, the scenario lists fields. As the very first step, discuss the scenarios with your colleagues. When you have a clear plan, you can take on the syntax.
Syntax: why would you use a Scenario Outline when you only have a single example?

What XAML design strategy for master/detail views LOB apps

I would like to present the user a grid with sales order lines. In this grid the user can enter an amount on each line to ship. When a Save button is pressed, all the modified lines will be processed.
+---+------------+---------+---------+--------+------------------+
| # | PartNumber | Ordered | Shipped | Descr. | Quantity to ship |
+---+------------+---------+---------+--------+------------------+
| 1 | A12356 | 10 | 5 | Wheel | [ input field ] |
+---+------------+---------+---------+--------+------------------+
| 2 | B54556 | 10 | 0 | Frame | [ input field ] |
+---+------------+---------+---------+--------+------------------+
[PROCESS BUTTON]
So the idea is the user can enter the amount to ship for multiple lines in one go and hit Process
So far so good.
What I'd like to achieve, is that the user is able to click the cells in this grid.
Click on PartNumber: A generic content element with part details will open
Click on ShippedQty: A generic content element will open with previous shipments.
etc.
I would like to re-use these generic content elements throughout my application.
(There are many different tables in which a user can click a PartNumber)
While viewing for instance the details of a PartNumber, the already modified input fields, scroll position, etc, have to remain intact in the master view (the table presented above).
My Question:
What would be the appropriate design strategy for this?
In WinForm's I'd just open a new dialog with the details. This doesn't seem appropriate for UWP.
So far I thought of the following alternatives:
SplitView with two panes: (1:Master) a sales order line Page and (2:Detail) a details Page which content is (re)set depending in which column the user clicks.
Pro: Can use Frame.Navigate() within details view.
ContentPresenter for which content is (re)set depending on whether the user clicks the PartNumber or Shipped Qty, etc.
ContentDialog or ModalDialog for the details content element.
This doesn't seem to be the way ContentDialog is meant to be used. Only one ContentDialog can be open at any time and ContentDialog is by default dynamically sized depending on the UI elements within.
Are there any options I'm missing?
"This doesn't seem appropriate for UWP."
I don't see why it would not be. You have lots of options so its really more about how you want your UI to flow than about what framework you are using. My experience is with WPF... use as applicable.
As mentioned it really depends on how you want your UI to look and how much work you want to put into it.
In my case I wanted my components (part details screen, previous shipments screen) to be completely independent of the host page and to not interfere with navigation. Using a modal dialog window was a good choice for me (but certainly not the only choice).
In my apps I add a class library called Components that is part of the presentation layer. I create components I call selectors (CustomerSelector, PartSelector, OrderSelector...) that can be used throughout my app. A selector is basically a window that is opened in a modal state. It displays a search grid and sets a property on the selector to an object or collection of objects or null if the user cancels.
// this handles a button click event
public async void SelectSeriesCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
SeriesSelector selector = new SeriesSelector(true, WatchListSeries);
bool? result = selector.ShowDialog(); // grid with search options is displayed in modal dialog window
if (result.HasValue && result.Value)
{
var series = selector.SelectedSeries; // use selected objects
}
}