praveenperera

praveenperera

Theres a new tool for acceptance testing called Wallaby, I was wondering if anyone has experience with it. I was specifically wondering how it compares to Hound, as that’s what I am using right now.

From this blog post it seems like it might be faster because it takes advantage of Ecto 2.0 features and runs all the tests concurrently?

Showing Posts 1 to 8

AstonJ

AstonJ

@keathley is a member here so hopefully he will spot this and add his thoughts :003:

sublimecoder

sublimecoder

I like the way wallaby tests read and the concurrent testing is super attractive as well. Hound doesn’t seem as readable to me though both get the job done.

keathley

keathley

Sorry for the late reply. I’ve been traveling for a few days.

Hound and Wallaby are similar in a lot of ways but different in a few key areas. I’ll try to break down what I think are the key differences and highlight why we wanted to build Wallaby in the first place.

Api

This is the biggest difference between the two libraries. Both Wallaby and Hound use Webdriver to talk with the browser. So under the hood its using a lot of the same functionality. The key differences are in the developer experience.

Wallaby’s api was designed in the same spirit of Capybara’s api. It defaults to finding elements by css and allows you to interact with form elements by their label text, name, or id. Under the hood it uses xpath to do more these dynamic selections. This allows you to write interactions like:

find(".user_form")
|> fill_in("First Name", with: "Chris")
|> fill_in("last_name", with: "Keathley")

I find that writing tests in this way conveys more meaning in your tests both for yourself and other people working with you.

By default, Wallaby will only allow you to interact with elements that a user would see. If a element exists on the page, but its not visible to a user Wallaby will block until it either becomes visible or until it times out and raises an error.

Hound’s api is a bit more explicit then Wallaby’s. For instance with finders you specify the “strategy” that you want to use to select elements on the page:

find_element(:name, "message")
find_element(:css, ".message")
submit_element(element)

As far as I know Hound will allow you to select any element on the page even if its not visible to the user. I hope that HashNuke or tuvistavie will correct me if I’m wrong about this.

Browsers

Wallaby (currently) only supports PhantomJS. However, we manage Phantoms for you. When Wallaby starts up we start a pool of Phantoms. Each test case checks out one of the Phantoms before it runs. That way we get test isolation between browsers and don’t pay startup costs for starting and stopping phantom.

Hound supports multiple browser tools (Selenium, PhantomJS, etc.). However it doesn’t manage any of these for you. You have to start up the driver and tell Hound what you’re using.

Concurrency

Wallaby and Hound BOTH support concurrent tests with Phoenix using the SQL Sandbox plug in phoenix_ecto. The difference is that Wallaby uses multiple browsers simultaneously. I haven’t benchmarked Hound and Wallaby so I can’t speak to the relative performance benefits of either.

There are pros and cons to both tools. I have a ton of respect for the work that HashNuke and tuvistavie are doing. Neither tool is necessarily better. They just have different design goals and opinions. I recommend that you check out both of them and go with the one that makes the most sense for you and your team.

25
Post #3
imetallica

imetallica

Sorry to bring back this old post but, does Wallaby support testing of SPAs?

keathley

keathley

Totally! In fact the majority of applications I’ve worked on with Wallaby have been large JS clients in front of a phoenix api.

imetallica

imetallica

Great to hear, I’m trying to use it on a new SPA project and to a different scenario: web crawling.

Eiji

Eiji

@keathley: I’m in team that uses HTTPoison, Hound, Floki and ExVCR to scrape data from page.I want to ask if we should think about your library it in next projects. We are parsing mostly old ASP.NET pages and we had some problems with them. The biggest problem is with sessions, same urls and caching responses. Imagine that slow site have a limited time of session (for one site we need to start a new session in middle of requests). Caching responses was also hard in some situations. Imagine that page depending on the data in session (or part of it) returns different responses for same urls. For example you need to submit form n times where n is the number of options in select tag. And it’s not end yet. Some pages uses JavaScript to make changes in session and finally redirects to other page. We also have a topic for one problem: how much time we need to wait for JavaScript execution?. Some sites makes our work really hard and any new helpful libraries are welcome. :smile: Is your API useful or just better (at least in some cases) than other packages when scraping in edge case situation like that? I don’t think about any changes in current project(s), but this could affect at least my future projects with similar targets.

sergio

sergio

Thank you very much for this write up, I appreciate it!

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
itzmidinesh
Hi all, I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
pragdave
How do I tell Hologram not to escape HTML when substituting into templates? {Textile.render(@product.long_description)} escapes the HTM...
New
rlipscombe
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
rlipscombe
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used? I’ve got two Github accoun...
New
adr
Hello all. I have a question as to best practices for code organization when implementing a liveview with a lot of responsibilities. Sup...
New

Other Trending Topics Top

dominicletz
Hey there, I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first. ...
New
raa-ziq
Hi everyone :waving_hand: I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews