Cucumber Playwright TypeScript Automation Framework
This course has been designed to simulate a real-world experience in building a Cucumber, Playwright & TypeScript automation framework from the ground up for a fully-featured application. Upon completion, you will be able to apply your learnings and the automation framework you have built into your respective companies and projects. We are confident you will become an expert in building a world-class automation framework.
More
Our course and the automation framework we will build together has been developed with guidance from some of the globes leading testing and software engineering professionals and because of that we believe we can offer an incredible course where we will:
- Develop your automation framework against a real react application running on your local machine.
- Build an end-to-end automation framework from the ground up for a full-featured end-to-end react application.
- Evolve your skills and continuously improve your automation framework as we progress through the course
- Learn how to build an object-orientated – engineer reviewed and approved automation framework.
- Learn how to create a playwright API automation suite (GET, PUT, POST, PATCH, DELETE)
We want this course to be the best decision you have ever made for your personal growth when it comes to improving your knowledge and skills in test automation framework architecture.
Watch Online Cucumber Playwright TypeScript Automation Framework
# | Title | Duration |
---|---|---|
1 | Introduction | 12:50 |
2 | Why does building a robust automation framework matter | 45:59 |
3 | Getting started with Node.js | 09:47 |
4 | Setting up your development environment | 03:59 |
5 | Setting up your development environment - VSCode | 05:46 |
6 | Cloning Repositories on GitHub & Starting your locally running React application | 07:15 |
7 | Setting up your first automation framework - part 1 | 09:35 |
8 | Setting up your first automation framework - part 2 | 09:20 |
9 | Setting up your first automation framework - part 3 | 09:58 |
10 | Key Learnings | 01:15 |
11 | Running your automation test in IntelliJ using an NPM configuration | 03:36 |
12 | Cucumber Scenario @tags - @dev, @smoke & @regression | 05:45 |
13 | Understanding regex, step linking and passing parameters via Cucumber steps | 12:29 |
14 | Working with element locators - Find and Update - Working with Developer Tools | 14:10 |
15 | Understanding hooks and why 'test context' matters | 06:56 |
16 | Key Learnings | 01:34 |
17 | Adding screenshots on test failure and test video recordings | 09:18 |
18 | Introducing Cucumber World - Seperate Context Cucumber Scenarios - Part 1 | 11:10 |
19 | Introducing Cucumber World - Seperate Context Cucumber Scenarios - Part 2 | 14:29 |
20 | Introducing Cucumber World - Seperate Context Cucumber Scenarios - Part 3 | 06:06 |
21 | Dynamic test configuration - A more flexible cucumber.js - part 1 | 09:53 |
22 | Dynamic test configuration - A more flexible cucumber.js - part 2 | 13:22 |
23 | ENV files for better environment variable management | 12:06 |
24 | Cucumber reporter and our first Dynamic Test Runner Script | 14:39 |
25 | Windows users (REQUIRED) - Adding your run_tests.bat to run your automation | 04:17 |
26 | Running your automation suite with npm instead of yarn | 06:54 |
27 | Key Learnings | 02:21 |
28 | Creating Mappings for Host URLS and Page ROUTES - part 1 | 11:10 |
29 | Creating Mappings for Host URLS and Page ROUTES - part 2 | 07:01 |
30 | Creating Mappings for Host URLS and Page ROUTES - part 3 | 12:24 |
31 | Creating Element Mappings and using Global Variables to pass page - part 1 | 08:45 |
32 | Creating Element Mappings and using Global Variables to pass page - part 2 | 09:13 |
33 | Creating Element Mappings and using Global Variables to pass page - part 3 | 07:04 |
34 | Creating Element Mappings and using Global Variables to pass page - part 4 | 09:55 |
35 | Introducing our custom waitFor() function - Removing playwright@test - part 1 | 08:39 |
36 | Introducing our custom waitFor() function - Removing playwright@test - part 2 | 07:35 |
37 | Introducing our custom waitFor() function - Removing playwright@test - part 3 | 07:48 |
38 | Key Learnings | 01:16 |
39 | Matching our Page URL to our expected route Regex | 13:20 |
40 | Determining our pageId by matching our page URL to our page Regex - part 1 | 12:56 |
41 | Determining our pageId by matching our page URL to our page Regex - part 2 | 06:40 |
42 | Determining our pageId by matching our page URL to our page Regex - part 3 | 12:52 |
43 | Determining our pageId by matching our page URL to our page Regex - part 4 | 12:23 |
44 | Introducing Form Steps - Our first end to end test - part 1 | 13:13 |
45 | Introducing Form Steps - Our first end to end test - part 2 | 08:18 |
46 | Introducing Form Steps - Our first end to end test - part 3 | 14:15 |
47 | Key Learnings | 01:42 |
48 | Playwright Inspector - Stepping into our automation test | 13:04 |
49 | Unlocking the benefits of Chrome Developer Tools - part 1 | 11:08 |
50 | Unlocking the benefits of Chrome Developer Tools - part 2 | 09:35 |
51 | Console logs, Breakpoints and Test Reports - part 1 | 07:52 |
52 | Console logs, Breakpoints and Test Reports - part 2 | 06:33 |
53 | Key Learnings | 01:17 |
54 | Automation Test Radio Buttons - Check and Uncheck - part 1 | 16:14 |
55 | Automation Test Radio Buttons - Check and Uncheck - part 2 | 11:32 |
56 | Introducing Negate to reduce duplication of step definitions - part 1 | 12:30 |
57 | Introducing Negate to reduce duplication of step definitions - part 2 | 08:19 |
58 | Automation test AutoComplete inputs, Input values and form validation - part 1 | 07:10 |
59 | Automation test AutoComplete inputs, Input values and form validation - part 2 | 09:10 |
60 | Automation test AutoComplete inputs, Input values and form validation - part 3 | 10:35 |
61 | Automation test AutoComplete inputs, Input values and form validation - part 4 | 11:50 |
62 | Running our automation suite in parallel & Introducing test retry | 06:13 |
63 | Key Learnings | 01:10 |
64 | Automation test Checkboxes (Check and Uncheck) - part 1 | 10:17 |
65 | Automation test Checkboxes (Check and Uncheck) - part 2 | 09:29 |
66 | Automating IFrames - Switching Frames mid test - part 1 | 11:50 |
67 | Automating IFrames - Switching Frames mid test - part 2 | 09:08 |
68 | Automating IFrames - Switching Frames mid test - part 3 | 11:45 |
69 | Automating IFrames - Switching Frames mid test - part 4 | 10:11 |
70 | Automating New Tabs and Windows - part 1 | 11:04 |
71 | Automating New Tabs and Windows - part 2 | 11:40 |
72 | Automating New Tabs and Windows - part 3 | 10:25 |
73 | Automating New Tabs and Windows - part 4 | 13:04 |
74 | Automating New Tabs and Windows - part 5 | 08:40 |
75 | Key Learnings | 01:06 |
76 | Automating Links, Buttons and Clicking element at Index - part 1 | 08:57 |
77 | Automating Links, Buttons and Clicking element at Index - part 2 | 09:31 |
78 | Automating Links, Buttons and Clicking element at Index - part 3 | 12:45 |
79 | Automating Links, Buttons and Clicking element at Index - part 4 | 05:08 |
80 | Automating Tables - Matching our HTML table to Cucumber Data Table - part 1 | 09:38 |
81 | Automating Tables - Matching our HTML table to Cucumber Data Table - part 2 | 06:43 |
82 | Automating Tables - Matching our HTML table to Cucumber Data Table - part 3 | 07:04 |
83 | Automating Switches - low code / no code | 07:44 |
84 | Key Learnings | 01:03 |
85 | Automating Browser Alerts, Page Alerts and Tooltips - part 1 | 10:53 |
86 | Automating Browser Alerts, Page Alerts and Tooltips - part 2 | 08:21 |
87 | Automating Browser Alerts, Page Alerts and Tooltips - part 3 | 12:50 |
88 | Automating Browser Alerts, Page Alerts and Tooltips - part 4 | 07:52 |
89 | Automating text areas & Hidden and Visible text | 11:46 |
90 | Asserting on stored values and expected values in our automation - part 1 | 12:24 |
91 | Asserting on stored values and expected values in our automation - part 2 | 07:29 |
92 | Asserting on stored values and expected values in our automation - part 3 | 10:14 |
93 | Key Learnings | 00:50 |
94 | Automating Cards and Avatars - Verify Element count - Part 1 | 10:21 |
95 | Automating Cards and Avatars - Verify Element count - Part 2 | 11:20 |
96 | Automating Cards and Avatars - Verify Element count - Part 3 | 08:34 |
97 | Automating Drop Down menus and Select Boxes - part 1 | 10:39 |
98 | Automating Drop Down menus and Select Boxes - part 2 | 07:16 |
99 | Refreshing our page mid test - Leveraging our URL assertion - part 1 | 11:32 |
100 | Refreshing our page mid test - Leveraging our URL assertion - part 2 | 06:25 |
101 | Key Learnings | 00:36 |
102 | Running our automation suite on a production environment - part 1 | 11:00 |
103 | Running our automation suite on a production environment - part 2 | 09:39 |
104 | Windows users (REQUIRED) - Updating your run_tests.bat to run your automation | 03:25 |
105 | Preparing our automation suite to run on production (Stabilization) - part 1 | 09:30 |
106 | Preparing our automation suite to run on production (Stabilization) - part 2 | 12:38 |
107 | Preparing our automation suite to run on production (Stabilization) - part 3 | 08:44 |
108 | Preparing our automation suite to run on production (Stabilization) - part 4 | 09:42 |
109 | Preparing our automation suite to run on production (Stabilization) - part 5 | 09:12 |
110 | Storing login details in our Environment Specific ENV files - part 1 | 09:51 |
111 | Storing login details in our Environment Specific ENV files - part 2 | 10:45 |
112 | Storing login details in our Environment Specific ENV files - part 3 | 13:52 |
113 | Key Learnings | 01:23 |
114 | Cucumber Example Tables to run test scenarios on a specific environment - part 1 | 09:52 |
115 | Cucumber Example Tables to run test scenarios on a specific environment - part 2 | 09:41 |
116 | Cucumber Example Tables to run test scenarios on a specific environment - part 3 | 10:18 |
117 | Introducing Device Emulation with Playwright - part 1 | 09:52 |
118 | Introducing Device Emulation with Playwright - part 2 | 11:41 |
119 | Customising and improving our console logs - part 1 | 08:10 |
120 | Customising and improving our console logs - part 2 | 11:02 |
121 | Customising and improving our console logs - part 3 | 09:15 |
122 | Customising and improving our console logs - part 4 | 07:05 |
123 | Key Learnings | 01:09 |
124 | Creating our own waitFor enabled waitForSelector function leveraging playwright | 13:30 |
125 | Preparing our step definitions for better failure errors - part 1 | 09:04 |
126 | Preparing our step definitions for better failure errors - part 2 | 09:41 |
127 | Key Learnings | 01:05 |
128 | Refactoring and improving our assertion step definitions - part 1 | 08:31 |
129 | Refactoring and improving our assertion step definitions - part 2 | 13:51 |
130 | Refactoring and improving our assertion step definitions - part 3 | 09:26 |
131 | Refactoring and improving our assertion step definitions - part 4 | 12:22 |
132 | Refactoring and improving our assertion step definitions - part 5 | 11:54 |
133 | Refactoring and improving our assertion step definitions - part 6 | 10:38 |
134 | Code clean up and consistency improvements - part 1 | 07:16 |
135 | Code clean up and consistency improvements - part 2 | 07:58 |
136 | Key Learnings | 00:57 |
137 | Mapping automation friendly errors messages to replace native errors - part 1 | 11:33 |
138 | Mapping automation friendly errors messages to replace native errors - part 2 | 10:47 |
139 | Mapping automation friendly errors messages to replace native errors - part 3 | 10:46 |
140 | Mapping automation friendly errors messages to replace native errors - part 4 | 08:25 |
141 | Mapping automation friendly errors messages to replace native errors - part 5 | 08:28 |
142 | Introducing waitForResult to handle our assertion error cases - part 1 | 10:39 |
143 | Introducing waitForResult to handle our assertion error cases - part 2 | 10:37 |
144 | Introducing waitForResult to handle our assertion error cases - part 3 | 12:15 |
145 | Introducing waitForResult to handle our assertion error cases - part 4 | 10:40 |
146 | Introducing waitForResult to handle our assertion error cases - part 5 | 09:03 |
147 | Introducing waitForResult to handle our assertion error cases - part 6 | 14:24 |
148 | Introducing waitForResult to handle our interaction error cases | 13:36 |
149 | Validating our new automation test failure errors - part 1 | 06:47 |
150 | Validating our new automation test failure errors - part 2 | 06:12 |
151 | Key Learnings | 01:32 |
152 | Populate form fields with random test data during our automation test - part 1 | 10:06 |
153 | Populate form fields with random test data during our automation test - part 2 | 13:47 |
154 | Building our an end to end automation suite for our contacts app - part 1 | 10:59 |
155 | Building our an end to end automation suite for our contacts app - part 2 | 07:57 |
156 | Building our an end to end automation suite for our contacts app - part 3 | 08:43 |
157 | Tagging our automation suite in preparation for (CI) Continuous Integration | 11:59 |
158 | Key Learnings | 01:20 |
159 | Adding the ability to intercept responses during automation tests - part 1 | 10:44 |
160 | Adding the ability to intercept responses during automation tests - part 2 | 09:22 |
161 | Adding the ability to intercept responses during automation tests - part 3 | 15:21 |
162 | Building our a suite of automation tests that leverage mocking - part 1 | 09:46 |
163 | Building our a suite of automation tests that leverage mocking - part 2 | 10:26 |
164 | Key Learnings | 00:53 |
165 | Integrating AXE engine into our automation framework - part 1 | 08:46 |
166 | Integrating AXE engine into our automation framework - part 2 | 10:30 |
167 | Integrating AXE engine into our automation framework - part 3 | 09:33 |
168 | Analysing, Understanding and Fixing some Accessibility issues - part 1 | 09:57 |
169 | Analysing, Understanding and Fixing some Accessibility issues - part 2 | 10:57 |
170 | Key Learnings | 01:08 |
171 | Pushing our project code to a private GitHub Repository | 10:19 |
172 | Buildkite - Turning our machine into a build agent | 10:58 |
173 | Our first green CI Pipeline - Viewing our Artifact's in the browser - part 1 | 08:28 |
174 | Our first green CI Pipeline - Viewing our Artifact's in the browser - part 2 | 12:00 |
175 | Our first green CI Pipeline - Viewing our Artifact's in the browser - part 3 | 11:20 |
176 | Our first green CI Pipeline - Viewing our Artifact's in the browser - part 4 | 09:04 |
177 | Reviewing our automation suite on pull request in GitHub | 12:31 |
178 | Key Learnings | 00:43 |
179 | Getting Ready! Setting up our postman collection - part 1 | 09:16 |
180 | Getting Ready! Setting up our postman collection - part 2 | 07:49 |
181 | Creating our playwright API automation folder structure | 06:11 |
182 | Automating GET, POST, PUT, PATCH and DELETE with Playwright - part 1 | 09:02 |
183 | Automating GET, POST, PUT, PATCH and DELETE with Playwright - part 2 | 06:39 |
184 | Automating GET, POST, PUT, PATCH and DELETE with Playwright - part 3 | 08:33 |
185 | Key Learnings | 00:54 |
186 | Conclusion | 02:53 |
187 | Promotion | 05:04 |
188 | Introduction | 04:10 |
189 | Getting started with node.js | 07:22 |
190 | Setting up your development environment - Intellij | 04:26 |
191 | Setting up your development environment - VSCODE | 04:20 |
192 | Key Learnings | 00:41 |
193 | Planning our API automation coverage using Postman - part 1 | 10:39 |
194 | Planning our API automation coverage using Postman - part 2 | 09:16 |
195 | Planning our API automation coverage using Postman - part 3 | 04:09 |
196 | Creating our API end-to-end automation project structure and e2e folder | 07:02 |
197 | GET, POST, PUT, PATCH and DELETE with Playwright and JavaScript - part 1 | 09:41 |
198 | GET, POST, PUT, PATCH and DELETE with Playwright and JavaScript - part 2 | 09:16 |
199 | GET, POST, PUT, PATCH and DELETE with Playwright and JavaScript - part 3 | 08:50 |
200 | GET, POST, PUT, PATCH and DELETE with Playwright and JavaScript - part 4 | 05:58 |
201 | Key Learnings | 00:47 |
202 | Running our first cucumber automation test | 12:47 |
203 | Introducing Cucumber World - part 1 | 10:25 |
204 | Introducing Cucumber World - part 2 | 05:27 |
205 | Passing our API response to cucumber steps with Cucumber World - part 1 | 08:56 |
206 | Passing our API response to cucumber steps with Cucumber World - part 2 | 05:06 |
207 | Introducing Lintrc to ensure code quality in our automation framework | 07:01 |
208 | Key Learnings | 00:55 |
209 | Customise the cucumber-js on runtime - part 1 | 09:14 |
210 | Customise the cucumber-js on runtime - part 2 | 09:50 |
211 | Environment files for better environment variable management | 10:41 |
212 | Introducing global configuration - Reusable getResponse function - part 1 | 10:51 |
213 | Introducing global configuration - Reusable getResponse function - part 2 | 10:24 |
214 | Key Learnings | 00:47 |
215 | Adding more GET automation tests to our suite - part 1 | 09:57 |
216 | Adding more GET automation tests to our suite - part 2 | 09:56 |
217 | Introducing the cucumber html reporter - Adding Parallel and Retry capabilities | 13:30 |
218 | Adding our first automation test for DELETE | 09:29 |
219 | Key Learnings | 00:46 |
220 | Creating posts with POST - part 1 | 09:58 |
221 | Creating posts with POST - part 2 | 10:12 |
222 | Editing posts with PATCH | 09:29 |
223 | Updating posts with PUT | 07:06 |
224 | Validating our json payload exists | 09:14 |
225 | Asserting on response text errors | 05:38 |
226 | Key Learnings | 00:36 |
227 | Conclusion | 01:51 |