Use open_browser() in tests when using WSL

Has anyone by any chance using WSL tried to use open_browser in your tests?

I’ve heard one could do something like open_browser(lv, &System.cmd("wslview", [&1])). But I have no idea how to make WSL or Elixir know how to open my default browser.

Has anyone gone through this and have been victorious? :rofl:

Thanks!

Not referring to tests in particular, but on WSL, you can run applications “on the Windows side”, such as cmd.exe. cmd.exe allows you to provide a shell command.

In Bash for example, you can do something like this:

cmd.exe /C "start https://elixirforum.com/"

# or
cmd.exe /C "start $( echo "https://jwt.ms/#access_token=${access_token}" )"

In Elixir, this might be a start:

System.cmd("cmd.exe", ["/C", "start https://elixirforum.com/"])

However, escaping stuff the right way can always be ‘difficult’ (https://flatt.tech/research/posts/batbadbut-you-cant-securely-execute-commands-on-windows/)

1 Like

I had some success with this:

  def open_browser_wsl(view) do
    Phoenix.LiveViewTest.open_browser(view, fn html_unix_path ->
      {wsl_path, 0} = System.cmd("wslpath", ["-aw", html_unix_path])
      cmd_args = ["/C", "start", String.trim_trailing(wsl_path), "/C", "bash"]
      System.cmd("cmd.exe", cmd_args)
    end)
  end
3 Likes

Nice this one worked!

The only problem is adding this function every time I need to open the browser :smile:

Will keep it in a notepad!

Good one! Kinda the same path I was trying with System.cmd

Just add a helper to your ConnCase :upside_down_face:

Otherwise, one of you should consider contributing this to PhoenixTest if it’s universal enough (I had to look up what WSL is so I don’t know anything here, but I did do some work around open_browser for that lib).

Do your test files have a line like this:

use MyAppWeb.ConnCase

?

If so, you can just write the function in test/support/conn_case.ex and then it will be available in all your live view tests.

Ah, yes. This. I am saying the same thing. :slight_smile:

I do not know if it is universal at all. It worked for me, one day. That’s all.
After that, all bets are off
I guarantee nothing!
Life is chaos! :wink:

That’s the function we would need to “contribute” to: phoenix_test/lib/phoenix_test/open_browser.ex at main · germsvel/phoenix_test · GitHub

Actually it’s a good idea to contribute, but I still know too little about what’s really going on behind it to contribute, so I’m gonna do some homework and… who knows, right? :person_shrugging: