Automation is not just Selenium.
Monolithic automation is slow, expensive, fragile, ineffective and difficult to maintain. Having one level of automation is bound to fail for many reasons.
Here are Fullstack QA, we break automation into different layers, starting from unit, functional, integration, system and smoke/sanity tests. Each level of automation is designed to catch different type of defect, just like fishing nets of different sizes. We use different combination of tools based on project and technology stack. We also apply a lot of abstraction and re-usability throughout, making the the whole framework robust, stable and appreciated by the whole team.