# Filip Hric - Test Automation Expert (Full Archive) > Filip Hric is a freelance DevRel, consultant, tester and developer. He teaches testers about web development and developers about testing. Filip is an international keynote speaker and one of the leading experts on test automation in Cypress.io. He's an author of several Cypress workshops and has taught hundreds of testers and developers around the world how to effectively use Cypress and apply good practices in web test automation. ## Connect with Filip - Twitter/X: https://twitter.com/filip_hric - LinkedIn: https://www.linkedin.com/in/filip-hric - Bluesky: https://bsky.app/profile/filiphric.com - GitHub: https://github.com/filiphric - YouTube: https://www.youtube.com/@filip_hric - Discord: https://discord.com/invite/3MdvPfT - Email: filip@filiphric.com - Schedule a call: https://cal.com/filiphric ## Key Pages - [Blog](https://filiphric.com/blog): Technical articles on test automation - [Workshops](https://filiphric.com/workshops): Live Cypress workshops - [Courses](https://filiphric.com/courses): Online learning resources - [Company Consulting](https://filiphric.com/company-consulting): Testing culture and DevRel consulting - [Individual Tutoring](https://filiphric.com/individual-tutoring): 1-on-1 mentoring sessions - [About](https://filiphric.com/about): More about Filip ## All Blog Posts - [How to Make Your SKILL.md Interactive](https://filiphric.com/how-to-make-your-skill-md-interactive): How I added interactive questions to a skill so it works in Claude Code, Cursor, and Codex, and what still breaks across harnesses. - [Maslow's Hammer and Three Lies QA Tells Itself](https://filiphric.com/maslows-hammer-and-three-lies-qa-tells-itself): A short post on what needs to change for QA to thrive in the age of AI. - [AGENTS.md Files Are Not Misleading Your AI Agent](https://filiphric.com/agents-md-files-are-not-misleading-your-ai-agent): A recent study sparked headlines claiming AGENTS.md files hurt AI agent performance. But the full picture tells a different story - human-written context files actually improve results by 4%. - [Don’t let A.I. read your .env files](https://filiphric.com/dont-let-ai-read-your-env-files): Stop storing API keys and database passwords in plain text .env files. Learn how to use 1Password CLI to inject secrets at runtime for better security. - [How I automated the annoying part of my job with Goose and Playwright MCP](https://filiphric.com/how-i-automated-the-annoying-part-of-my-job-with-goose-and-playwright-mcp): Learn how to automate repetitive issue creation tasks using Goose desktop app and Playwright MCP. Stop context switching and let AI handle the boring stuff. - [10 Tips for Writing Playwright Tests with Cursor](https://filiphric.com/cursor-playwright-tips): Practical tips gathered from months of writing Playwright tests with Cursor. Learn how to use project rules, workflows, screenshots, and MCP for better test automation. - [2FA testing with Playwright and Mailosaur](https://filiphric.com/2fa-testing-with-playwright-and-mailosaur): Learn how to automate email magic links, SMS verification codes, and authenticator app logins in Playwright using Mailosaur for comprehensive authentication testing. - [Testing Will Become More Important, Not Less](https://filiphric.com/testing-will-become-more-important-not-less): LLMs speed up coding but quality concerns remain. Testing becomes more crucial, evolving to include AI-generated tests while human expertise in test design stays valuable. - [Understanding timeouts in WebdriverIO](https://filiphric.com/understanding-timeouts-in-webdriverio): Learn how to effectively use timeouts in WebdriverIO to create reliable end-to-end tests - [Introduction to testing in Vitest](https://filiphric.com/introduction-to-testing-in-vitest): A comprehensive guide to Vitest testing framework, covering its core features, capabilities and practical examples for unit and component testing - [How to do authentication in Playwright](https://filiphric.com/how-to-do-authentication-in-playwright): Learn different approaches to handle authentication in Playwright, from basic login sequences to advanced techniques like session storage and API auth. - [Test like a developer, develop like a tester](https://filiphric.com/test-like-a-developer-develop-like-a-tester): How testers and developers can work better together. This is a written version of my keynote talk from Front-End Test Fest 2023. - [Laid off as a tester. What now?](https://filiphric.com/laid-off-as-a-tester-what-now): Navigating the changing QA job market: tips for staying relevant, expanding your skillset, and preparing for potential layoffs in software testing - [Testing as an entry gate to IT](https://filiphric.com/testing-as-an-entry-gate-to-it): Some people don’t like the phrase “testing can be a great entry gate into the world of IT”. I kinda disagree, I think testing can be a great entry into the world of IT. This post discusses some reasons why I think that. - [Next big trend in testing? Debugging](https://filiphric.com/next-big-trend-in-testing-debugging): Debugging has been with us and will be for a long time. Making improvements on that experience might just be the next big thing. - [Time-travelling with Replay.io](https://filiphric.com/time-travelling-with-replayio): Replay.io is a tool that records everything your app does and provides you with debugging superpowers. The recording is a combination of video, source code of your application, DOM snapshots and a timetravel-enabled devtools that allow you to retroactively add print statements to your app’s execution. - [Cypress panic (if there even is one)](https://filiphric.com/cypress-panic-if-there-even-is-one): A reddit post was making rounds on the internet claiming that Cypress.io is dying and you should migrate your projects. I believe this post got way more attention than it deserved. In fact, I believe it deserved no attention whatsoever because by amplifying it, the lies that it contained spread far and wide. - [Cypress basics: Using baseUrl](https://filiphric.com/cypress-basics-using-baseurl): Setting up `baseUrl` helps you write your test in a way that enables running them against multiple environments. This is vital to make your tests available for multiple versions of your app. - [Cucumber in Cypress: A step by step guide](https://filiphric.com/cucumber-in-cypress-a-step-by-step-guide): A detailed guide on how to set up cucumber-preprocessor, run your feature files, organize your tests, filter them by tags and set up an HTML reporter. - [How to wait for page to load in Cypress](https://filiphric.com/how-to-wait-for-page-to-load-in-cypress): What if your page takes time to load and your first command fails because of this? In this blogpost I explain how to make sure that your page is fully loaded - [How to structure a big project in Cypress](https://filiphric.com/how-to-structure-a-big-project-in-cypress): Opinion on how a project with +2000 tests should be structured in order to achieve good maintainability, speed and lower the risk of introducing regressions. - [Cypress.io and GitHub Actions: A step by step guide](https://filiphric.com/cypress-and-git-hub-actions-step-by-step-guide): GitHub Actions are a powerful and easy-to-learn tool that can help you quite a lot, In this blogpost we'll take a look into how they can be used to run your Cypress tests. - [Use cy.session() instead of login page object in Cypress](https://filiphric.com/use-session-instead-of-login-page-object-in-cypress): Short guide to using cy.session() command an save minutes from your test run. Creating a session with Cypress can not only save you time, but can be a great substitution for a log page object - [Testing a PDF file with Cypress](https://filiphric.com/testing-pdf-file-with-cypress): How to download a PDF file, check the download and parse out the content of the file for further testing - [Testing geolocation with Cypress](https://filiphric.com/testing-geolocation-with-cypress): Explanation on how to test a page that can locate its users either via API call or using browser’s Geolocation API capabilities - [Cypress basics: Uploading a file](https://filiphric.com/cypress-basics-uploading-file): Short explanation on how to upload a file with Cypress to a drag and drop element, inputs or directly by calling your API - [8 common mistakes in Cypress (and how to avoid them)](https://filiphric.com/8-common-mistakes-in-cypress-and-how-to-avoid-them): In this blogpost I’m sharing a couple of testing antipatterns that can make your test flaky, hard to read or slow. - [Testing frontend performance with Cypress](https://filiphric.com/testing-frontend-performance-with-cypress): How to measure loading of elements appearing on page using browser performance API and creating a custom command out of it. - [Writing better command chains in Cypress](https://filiphric.com/writing-better-command-chains-in-cypress): Understanding how command chaining in Cypress works is essential for writing stable tests. In this week’s explainer we’ll take a look on how we can make our tests more stable with writing proper command chains - [Google Sign in with Cypress](https://filiphric.com/google-sign-in-with-cypress): Explanation on how to log in to Google SSO enabled app programmatically and how does the process actually work. - [Switch between environments in Cypress](https://filiphric.com/switch-between-environments-in-cypress): There are multiple ways you can switch to different environments in Cypress. In this blogpost, I explain which ones you can use and show some examples. - [Cypress basics: API testing](https://filiphric.com/cypress-basics-api-testing): Cypress is a great testing tool that can be also very helpful when testing API. In this post, I’ll go over some basics on how to write an API test in Cypress. - [Waiting in Cypress and how to avoid it](https://filiphric.com/waiting-in-cypress-and-how-to-avoid-it): Adding a wait to your test is something people like to avoid. Luckily, with Cypress, there are several ways of how to avoid waiting for a static period of time and simply move a test forward once the application is in a state we desire. - [Cypress basics: Variables](https://filiphric.com/cypress-basics-variables): How to store variables in Cypress tests and use variables and aliases inside the test and between tests. - [Cypress basics: xpath vs. CSS selectors](https://filiphric.com/cypress-basics-xpath-vs-css-selectors): Using xpath with Cypress is possible through a plugin. In this post I show you how to install this plugin and show you some examples how to use xpath and compare it to Cypress commands. - [Autocompleting selectors in Cypress with TypeScript](https://filiphric.com/autocompleting-selectors-in-cypress-with-typescript): Using TypeScript, we can make our lives with custom selectors easier. Our editor can autocomplete our selectors and check if we aren’t using any that were already deleted - [Generating a random user in Cypress test](https://filiphric.com/generating-random-user-in-cypress-test): Quick guide on how to generate a random user in Cypress and an explanation of various ways on how to integrate that data into Cypress test. - [Testing links with Cypress](https://filiphric.com/testing-links-with-cypress): Let’s say you want to test all the links in a navigation bar, ideally in most effective way. In this article I show you some of the most effective ways - [Reading and testing JSON object in Cypress](https://filiphric.com/reading-and-testing-json-object-in-cypress): Ever got that frustrating Cannot read property 'x' of undefined error? If you are starting with JSON objects, it is easy to get lost. In this article I hope to shed some light into how to read and test them with Cypress - [Cypress basics: Check attributes, value and text](https://filiphric.com/cypress-basics-check-attributes-value-and-text): Short explanation of how to test and access different properties of a given element using .invok() function - [.contains() - an overlooked gem in Cypress](https://filiphric.com/contains-an-overlooked-gem-in-cypress): Although the name of this command sounds like an assertion, it is actually a selecting command. Let’s look into what makes this command great. - [Improve your custom command logs in Cypress](https://filiphric.com/improve-your-custom-command-logs-in-cypress): Short explanation on how to take your custom commands to another level with custom logging, snapshots and many more. - [Tips for debugging tests in Cypress](https://filiphric.com/tips-for-debugging-tests-in-cypress): If you’ve been testing for a longer time, you know that writing a test is only half of the story. The other half is maintenance. I share a couple of ways you can debug your tests in Cypress in my latest article. - [Make your Cypress tests faster with .clock()](https://filiphric.com/make-your-cypress-tests-faster-with-clock): With .clock() and .tick() functions, it is possible to manipulate app’s time and make your test faster by skipping waits of setTimeout() and setInterval() functions. - [Starting with TypeScript in Cypress](https://filiphric.com/starting-with-typescript-in-cypress): TypeScript has been gaining popularity over last couple of years, and for good reason. Learn how you can implement TypeScript features in your tests. - [Cypress basics: before(), beforeEach(), after() and afterEach()](https://filiphric.com/cypress-basics-before-beforeeach-after-aftereach): Mocha hooks can help you tremendously when trying to avoid repetition in your tests. This article explains how these hooks work and how to use them effectively. - [Skip test conditionally with Cypress](https://filiphric.com/skip-test-conditionally-with-cypress): Description of various ways of how you can filter your tests, run them based on a given condition or skip them altogether in Cypress. - [Cypress basics: check if element exists](https://filiphric.com/cypress-basics-check-if-element-exists): In this article we are exploring ways to assert visibility of an element on a page. There are couple of gotchas that may be confusing at times. - [Dealing with multiple redirects in Cypress](https://filiphric.com/dealing-with-multiple-redirects-in-cypress): There are cases where you might deal app quickly redirecting through multiple pages. Chances are that Cypress will not register the page in the middle of redirect chain. In this post I will show you ways you can deal with this. - [Understanding code coverage in Cypress](https://filiphric.com/understanding-code-coverage): It’s pretty awesome that you can use e2e tests to generate your coverage data. In this blog I’m describing how the whole process works. - [Hover in Cypress](https://filiphric.com/hover-in-cypress): Short guide on how to hover over elements in Cypress. As there are multiple ways hover actions work, there are multiple ways of achieving hover. - [Migrating .route() to .intercept() in Cypress](https://filiphric.com/migrating-route-to-intercept-in-cypress): With version 6.0.0 of Cypress.io, the network layer was completely rewritten. This post will guide you through the process of migration to the new experience. - [Working with API response data in Cypress](https://filiphric.com/working-with-api-response-data-in-cypress): In this post, I’m showcasing different ways to handle data generated by server and use them in your tests. - [Create a configuration plugin in Cypress](https://filiphric.com/create-a-configuration-plugin-in-cypress): There are several different ways to configure how your Cypress tests can be configured. In this post, I’m describing these ways and explain how you can view them in Cypress GUI. - [Test grepping in Cypress using Module API](https://filiphric.com/test-grepping-in-cypress-using-module-api): Sometimes you want to run just a subset of your tests. With Module API, you can achieve just that. Showcasing how you can grep your tests by folder. - [Using destructuring in Cypress](https://filiphric.com/using-destructuring-in-cypress): Short explanation on how to do destructuring in JavaScript and how you can use it to simplify your Cypress tests. - [Cypress basics: Where did my cookies disappear?](https://filiphric.com/cypress-basics-where-did-my-cookies-disappear): Cypress clears the browser state before each of your tests. This means that sometimes you might need to think about how you need to handle cookies. - [Testing a websocket application with Cypress](https://filiphric.com/testing-websocket-application-with-cypress): Learn how to test websocket-enabled applications using Cypress.io, including handling real-time updates and verifying socket messages. - [Opening a new tab in Cypress](https://filiphric.com/opening-a-new-tab-in-cypress): Spoiler alert: you don’t. But there are tons of things you can do to test your link redirects properly. - [Cypress basics: Selecting elements](https://filiphric.com/cypress-basics-selecting-elements): Cypress is using query selectors to find elements on your page. But there are couple of really powerful ways to select elements on page using Cypress commands - [Playing with experimental network stubbing feature in Cypress](https://filiphric.com/playing-with-experimental-network-stubbing): A short exploration of the capabilities of new .route2() command that was released with Cypress version 5.1.0. - [Lesser known Cypress.io tricks](https://filiphric.com/lesser-known-cypress-tricks): I often come across undocumented or not so widely used features that you might find helpful. Here’s a list of couple of those. - [My favourite VS Code extensions for writing tests in Cypress](https://filiphric.com/my-favourite-vs-code-extensions): VS Code provides a variety of cool exenstions. Here are some of those that have proven to be useful for my workflow when writin tests in Cypress. - [Testing lists of items](https://filiphric.com/testing-lists-of-items): Short description of various ways of testing list of items using Cypress, utilizing Cypress’ retryability. - [Improve your error screenshots in Cypress](https://filiphric.com/improve-your-error-screenshots-in-cypress): Explanation of how you can use cy.log() command to make your screenshots more readable and your debugging experience even faster. - [I did a Cypress workshop and this is what I learned](https://filiphric.com/i-did-a-cypress-workshop-and-this-is-what-i-learned): Describing how I conducted my first live workshop on Cypress.io on a conference in Brno and sharing my personal recommendations. - [Testing email flows with Mailosaur](https://filiphric.com/testing-email-flows-with-mailosaur): A short giude on how to test e2e flows that require an email to be opened. Code demonstration using Mailosaur. - [What psychology taught me about QA](https://filiphric.com/what-psychology-taught-me-about-qa): Some of my psychology background has translated to my tech career. I hope to provide some principles which I hope to be valuable to you as well. ## Additional Resources - Curated highlights: https://filiphric.com/llms.txt - RSS Feed: https://filiphric.com/rss.xml - Sitemap: https://filiphric.com/sitemap.xml