Websites are complex systems, and as a result, you need advanced tools to test them.
Yet too often this complexity turns into an overcomplicated solution.
The truth is, there are no magical tools out there that can remove the overall complexity of testing websites, only ones that pretend to hide it behind bells and whistles.
Tools are too often sold as antidotes to the complex nature of sites, promising to simplify testing to just a few actions.
We can't pretend this complexity doesn't exist, because when you do, you end up with:
- Fragile tests that are constantly breaking with every update to the site
- Tests that are confusing to understand and nearly impossible to debug
- A test suite that's never run because it's too flakey and too difficult to integrate with the everyday processes of the team
How do I know this? I've lived it!
When I first started out, I thought that getting testing right was simply a matter of picking out the right tool for the job. So long as I got that right, I'd find success.
After going through tool after tool and never gaining any real value, I knew something was wrong.
When I finally approached the problem with honesty, instead of searching for a non-existent magic solution, I understood that websites are complex and that's okay.
Once you understand that there is no "perfect" tool and that you have to solve the testing puzzle for yourself, you become empowered to make smart choices about where to focus your efforts, instead of trying to do everything all at once.
I used to write test after test after test, but no one would use them because they'd never consistently pass.
I used to spend weeks trying to integrate my tests with a third-party tool that promised to make things easier, and all it added was yet another layer of trouble.
And after all this effort, **no one really cared**, because the tests were too fragile and too far removed from the development lifecycle.
When no one cares about the work you do... well, that's a scary place to be!
If someone handed you a screw and told you to join two pieces of wood together, you'd go looking for a screwdriver. While the screw is a simple machine, it still requires a specialized tool and a smart approach.
If you instead grabbed a hammer, that person may look at you a little funny. Sure, the hammer would get the job done, but it would be messy and prone to failure. It's a short-term hack to something that needs a long-term vision.
So why do we look at testing, which should require specialized tools and a smart approach, and think that we can just hammer on a solution that lasts?
After shifting my approach from trying to find a magical tool which doesn't exist, to finding a tool that would allow me to take complex actions in simple ways, I was able to quickly narrow in on a choice: WebdriverIO.