Hello friends,
I am seeking advice on how to proceed with my personal web automation project.
In recent months I finished my first back-end app using Python on a Linux server. I use it to watch over a clothing website’s homepage, that is the appearance of new product notification modals DOM changes, to send myself a push notification to my phone using the Matrix CLI utility matrix-commander
when a new product is added. The whole app is built upon Selenium/ChromeDriver library’s explicit wait loops.
Python example:
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.ID("garment")));
With the introduction out of the way, let’s look at the “problem”. I would like to rebuild this app using Elixir; for these reasons:
- a fun experience to learn Elixir
- better interoperability with my Phoenix app
I am but an Elixir novice, therefore I have many questions:
- What app structure would you suggest? In Python it was simply a deeply nested loop that corrected itself with another loop on an error-raise, but I am unsure how I would do this in Elixir.
1.1. How would you utilize Elixir’s fault-tolerance to keep this “sentry app” running?
1.2. If I wanted it running alongside a Phoenix app, is an Elixir umbrella project a suitable option?
2. The most mature library for web automation using ChromeDriver seems to be Wallaby, but it’s implementation is with the ExUnit test blocks (now feature blocks) and I am unsure if it would work outside these ExUnit tests. Is it possible to run such code without the feature block? Or is it better to somehow run the program in them? Example code:
feature "users can create todos", %{session: session} do
session
|> visit("/todos")
|> fill_in(text_field("New Todo"), with: "Write my first Wallaby test")
|> click(button("Save"))
|> assert_has(css(".alert", text: "You created a todo"))
|> assert_has(css(".todo-list > .todo", text: "Write my first Wallaby test"))
end
I would be grateful for any insights that you might bring.