Announcing Marionette: It's like Selenium, but not

This is a project I've been working on for weeks and I'm very excited to finally have it to a point where I can announce it to the community.

Marionette was inspired by Puppeteer, and actually started as an attempt to port Puppeteer to Crystal. I learned after about a week of struggle that Node is much better adapted to an async workflow than Crystal. The lack of a good event system and promises made working with WebSockets in the way I needed quite difficult. I thought Marionette was doomed to failure until something changed in Crystal or the ecosystem, but then I learned about the actual Marionette protocol from Firefox.

The Marionette protocol is a TCP protocol built on top of WebDriver and is similar to what Selenium WebDriver uses. It allows near complete control of Firefox using TCP and JSON; including the ability to navigate, take screenshots, simulate pointer events, open and close dialogs, execute javascript, and more.

You can check out the project at https://github.com/watzon/marionette. The API is incomplete, but usable!