1<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/>
vendor: 66 bytes, line 1
1<script async="" src="https://www.googletagmanager.com/gtag/js?id=
1G-C2792BJ3WM
vendor: 11 bytes, line 1
1"></script>
1<script async="">
vendor: 170 bytes, lines 1-5
1window.dataLayer = window.dataLayer || []; 2 function gtag(){dataLayer.push(arguments);} 3 gtag('js', new Date()); 4 5 gtag('config', '
5G-C2792BJ3WM
vendor: 3 bytes, line 5
5');
5</script>
5<link rel="preload" href="/_next/static/css/7d0631e6cff5dbf0.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/7d0631e6cff5dbf0.css" crossorigin="" data-n-g=""/><link rel="preload" href="/_next/static/css/6499859c0d60db51.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/6499859c0d60db51.css" crossorigin="" data-n-p=""/><noscript data-n-css=""></noscript>
5<script defer="" crossorigin="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script>
5<script src="/_next/static/chunks/webpack-4ea1bc5b09ae36fd.js" defer="" crossorigin=""></script>
5<script src="/_next/static/chunks/framework-2e68dedaa8ccd613.js" defer="" crossorigin=""></script>
5<script src="/_next/static/chunks/main-a3f6e5c74f33bdb0.js" defer="" crossorigin=""></script>
5<script src="/_next/static/chunks/pages/_app-3910a9b088486a81.js" defer="" crossorigin=""></script>
5<script src="/_next/static/chunks/pages/workshops-9bafc773554b4626.js" defer="" crossorigin=""></script>
5<script src="/_next/static/N5LMkZ11bpBZfQb1YmA-w/_buildManifest.js" defer="" crossorigin=""></script>
5<script src="/_next/static/N5LMkZ11bpBZfQb1YmA-w/_ssgManifest.js" defer="" crossorigin=""></script>
5</head><body><div id="__next"><div class="Workshops_container__l08fv"><header class="Workshops_header__2sGjI"><h1>Cypress Workshops</h1><div class="Workshops_info__4dwR7">I have been teaching Cypress workshops both in person and remotely. All my standard workshops are open source - each repository contains the slides with the material and the practice exercises you can do on your own. But people love having me as their instructor because I can answer all their questions, and go deep into the details of how the things work, why Cypress is built like that, and how to write the best possible tests.</div></header><main class="Workshops_main__2_loz"><h2 class="Workshops_sectionHeading__y5PSb">What People Are Saying</h2><ul class="Workshops_quotes__PzLLh"><li class="Workshops_quote__wBVjD">Unless you hear it from an expert you will always doubt whether you are doing it right or wrong, or if there's a better approach. Put an end to your sleepless nights and have a once in a lifetime opportunity to hear it from Gleb.</li><li class="Workshops_quote__wBVjD">Go from "What's Cypress?" to "How did I live without Cypress?" in the first hour of being introduced to this powerful and easy-to-use testing framework.</li></ul><h2 class="Workshops_sectionHeading__y5PSb">Scheduled Workshops</h2><form class="Workshops_workshops__fiOCP"><ul><li><h2 class="Workshops_workshopTitle__dreIf">Hustef 2024</h2><div class="Workshops_workshopInfo__m2Kg0"><div>An in-person workshop "Web Application Testing With Cypress And Playwright" in Budapest, Hungary.<span class="Workshops_workshopDate__9E2tz">October 2024.</span></div><div class="Workshops_workshopRegistrationLink__RJJjH"><a href="https://hustef.hu/" target="_blank">Registration link</a></div></div></li><li><center>Previous workshops at SmashingMagazine, ConFoo.CA, ng-conf, RefactorDX, International JavaScript Conference</center></li></ul></form><h2 class="Workshops_sectionHeading__y5PSb"><a id="available-workshops" href="#available-workshops">Available Workshops</a></h2><form class="Workshops_workshops__fiOCP"><ul><li><h2 class="Workshops_availableWorkshopTitle__YVsEU">Cypress Basics</h2><div class="Workshops_workshopInfo__m2Kg0"><div>This workshop introduces you to the Cypress.io Test Runner and teaches writing realistic tests that are readable, reliable, and fast. Typically lasts 8 hours.<details><summary>Contents</summary><ul><li>Installing Cypress and writing the first test</li><li>Cypress documentation, examples, and recipes</li><li>Selecting the DOM elements and interacting with the page</li><li>Controlling the application state</li><li>Removing test flake</li><li>Spying and stubbing the network communication from tests</li><li>Running Cypress tests on Continuous Integration system</li><li>Factoring out pieces of tests into custom commands</li></ul></details></div><div class="Workshops_workshopRegistrationLink__RJJjH"><a href="https://github.com/bahmutov/cypress-workshop-basics" target="_blank">bahmutov/cypress-workshop-basics</a></div></div></li><li><h2 class="Workshops_availableWorkshopTitle__YVsEU">Visual Testing With Cypress</h2><div class="Workshops_workshopInfo__m2Kg0"><div>Catch CSS and visual regressions using open-source tools. Typically lasts 8 hours. Based on my course<!-- --> <a href="https://cypress.tips/courses/visual-testing">Visual Testing With Cypress</a><details><summary>Contents</summary><ul><li>Cypress CSS assertions</li><li>Waiting for animations</li><li>Taking page and element screenshots</li><li>Storing and updating gold images on CI</li><li>Diffing images using free tools</li><li>Visual assertions when dealing with random data</li><li>Hosted vs on-prem visual services</li></ul></details></div><div class="Workshops_workshopRegistrationLink__RJJjH"><a href="https://github.com/bahmutov/cypress-visual-testing-workshop" target="_blank">bahmutov/cypress-visual-testing-workshop</a></div></div></li><li><h2 class="Workshops_availableWorkshopTitle__YVsEU">Cypress on CI</h2><div class="Workshops_workshopInfo__m2Kg0"><div>A workshop that teaches you how to run Cypress on major CI providers including CircleCI, GitHub Actions, Netlify Build, and generic CI. Typically lasts 4 hours. Can be customized for your particular continuous integration system.<details><summary>Contents</summary><ul><li>Useful NPM scripts and utilities</li><li>Running Cypress on a generic CI</li><li>Cypress GitHub Action</li><li>Cypress GHA reusable workflows</li><li>Split Cypress specs across multiple machines</li><li>Cypress CircleCI Orb</li><li>Cypress Netlify plugin</li></ul></details></div><div class="Workshops_workshopRegistrationLink__RJJjH"><a href="https://github.com/bahmutov/cypress-workshop-ci" target="_blank">bahmutov/cypress-workshop-ci</a></div></div></li><li><h2 class="Workshops_availableWorkshopTitle__YVsEU">Full Code Coverage Workshop</h2><div class="Workshops_workshopInfo__m2Kg0"><div>A workshop where we achieve 100% code coverage by writing a combination of E2E and component tests for a React application. Full day. Based on my course<!-- --> <a href="https://cypress.tips/courses/swag-store">Testing The Swag Store</a>
5<details><summary>Contents</summary><ul><li>Your first Cypress test</li><li>Common tests for an e-store</li><li>Using fixture files</li><li>Testing login and user sessions</li><li>Writing custom commands</li><li>Page objects in your tests</li><li>Cypress React component testing</li><li>Instrument your E2E tests</li><li>Generate code coverage report</li><li>Instrument your component tests</li><li>Achieving 100% code coverage</li></ul></details></div><div class="Workshops_workshopRegistrationLink__RJJjH"><a href="https://github.com/bahmutov/taste-the-sauce" target="_blank">bahmutov/taste-the-sauce</a></div></div></li><li><h2 class="Workshops_availableWorkshopTitle__YVsEU">Cypress Vs Playwright Hands On</h2><div class="Workshops_workshopInfo__m2Kg0"><div>Which test runner is better for writing end-to-end web tests? Let's write the same tests using each test runner and find out. Full day. Based on my course<!-- --> <a href="https://cypress.tips/courses/cypress-vs-playwright">Cypress vs Playwright</a><details><summary>Contents</summary><ul><li>Installing the test runners</li><li>Writing TodoMVC tests using Cy and Pw</li><li>Assertions and retries</li><li>Spying and stubbing network calls</li><li>Checking application data from tests</li><li>Test isolation, clock control, etc</li></ul></details><details><summary>Detailed contents</summary><ul class="Workshops_topList__f4uQ9"><li>Testing using Cypress and Playwright<ul class="Workshops_innerList__Ku37G"><li>Installing the test runners</li><li>Where to find help</li><li>Main Cy and Pw commands Starting application before</li><li>running tests Cy and Pw GUI mode for writing tests</li><li>writing an example test</li></ul></li><li>Writing TodoMVC tests using Cy and Pw<ul class="Workshops_innerList__Ku37G"><li>adding an item</li><li>completing an item </li><li>deleting an item </li><li>reset the data before the test </li><li>clear completed todos</li></ul></li><li>Assertions and retries<ul class="Workshops_innerList__Ku37G"><li>adding custom assertions to Cy and Pw </li><li>Cypres <code>should(callback)</code> assertions<!-- --> </li><li>Cypress chains of queries </li><li>confirm the table is sorted after a time delay</li></ul></li><li>Spying and stubbing network calls<ul class="Workshops_innerList__Ku37G"><li>spy and stub loading the data</li><li>spy on adding new items</li><li>testing loading elements and slowing down the network calls</li></ul></li><li>Checking application data from tests<ul class="Workshops_innerList__Ku37G"><li>access the application data store object </li><li>calling application methods from tests</li></ul></li><li>Running tests on CI<ul class="Workshops_innerList__Ku37G"><li>using GitHub Actions as an example</li></ul></li><li>Advanced features<ul class="Workshops_innerList__Ku37G"><li>test isolation mode</li><li>fail the test on application error</li><li>control application timers and clock</li><li>using 3rd party plugins and reporters</li><li>Q & A</li></ul></li></ul></details><div><b>Prerequisites:</b> Basic knowledge of JavaScript and Node.js is required. The students need a laptop with Node.js and Git installed to be able to run the application locally and write tests.</div></div></div></li><li><h2 class="Workshops_customWorkshopTitle__Ozj0F">Custom</h2><div>Want to create a custom workshop specifically for your organization? No problem! Collect the topics and the questions from your QA and Dev teams, and send it my way. I will create a custom-tailored workshop that covers the topics relevant to your team. <strong>Possible ideas:</strong> Cypress plugins, debugging failed tests, Cypress vs Playwright.</div></li><li><h2 class="Workshops_customWorkshopTitle__Ozj0F">Workshop Q&A</h2><div>There is one more thing I can offer you. Since my workshops are open-source, you can go through the material and practice exercises yourself. Then invite me for a remote Q&A session where I can answer any questions.</div></li></ul><div class="Workshops_info__4dwR7"><p>Company rates: $10k for a standard full-day 8 hour workshop with fewer than 30 people. For companies over 10,000 employees, or audiences of more than 30 people the full-day rate is $20k. Conference rates: it depends, we can talk. For "Workshop Q&A" session the rate is $1k per hour.</p> <p>To get in touch, please email "gleb.bahmutov" at gmail.com.</p></div></form></main></div></div>
5<script id="__NEXT_DATA__" type="application/json" crossorigin="">{"props":{"pageProps":{}},"page":"/workshops","query":{},"buildId":"N5LMkZ11bpBZfQb1YmA-w","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script>
5<div id="modal-root"></div></body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.