Using wallaby: including chromedriver in release

I just stumbled across #wallaby – it’s a great library! I’m wondering if anyone has included chromedriver (or some other browser) in a mix release? Is it enough to ensure that the target machine has a viable version of chromedriver installed so when the release binary runs, a working version of chromedriver is available? Or would a different approach be preferred?

Wallaby is focused on being a testing library, and has some calls to ExUnit in it that will not be available in a release.

But, assuming you might fork and remove that (I think it’s one call to ExUnit.after_suite/1), you have two options.

The easiest is to just ensure that you have chrome and chromedriver installed on your host.

The latter would be to package them into your priv folder, make sure that gets copied into your release, and then configure Wallaby to look in those places for chromedriver and chrome.

Thanks! I see that it is geared towards a testing library, but it has most of the levers I need while doing some fetching that requires some javascript awareness.

I would be also be interested to use wallaby outside tests. This would be very nice since some data sources are not crawlable without evaluating the related javascript in the site.

Wallaby has nice syntax for that. If there are other recommendations on retrieving data like this I would be very interested.

I have used puppeteer and puppeteer-ruby bindings on my earlier hobby projects but I would want to try elixir this time.

Please see this discussion and the linked to answer: Testing a Javascript app with Elixir-Wallaby · Discussion #710 · elixir-wallaby/wallaby · GitHub.

Edit: Sorry, responded too soon before scrolling up to the see the rest of the thread. This is probably not the answer you are looking for :sweat_smile:.

For anyone looking for a way to use current wallaby in production and hitting ExUnit.after_suite/1

What worked for me is to include :ex_unit in your extra_applications

  def application do
    [
      mod: {MyCool.Application, []},
      extra_applications: [:logger, :runtime_tools, :ex_unit]
    ]
  end
1 Like