@ledsun blog

無味の味は佳境に入らざればすなわち知れず

WSLとselenium-webdriver

RailsシステムテストをWSLで実行しようと、軽い気持ちで初めてみました。 意外と難しいです。

ポイント次の2点です

  • WindowsのホストOSのChromeを動かそうとすると、ホストはlocalhostでは参照できない
  • GUIのない)WSLのChromeを動かそうとするときは、ヘッドレスモードにする

いまのところ上手く行っていません。

Railsシステムテストの準備

ジェネレートコマンドでひな形を作ります。

bin/rails generate system_test docs  

生成したファイル内のコメントアウトを外します。次のコマンドで実行します。

bin/rails test test/system/docs_test.rb 

色々足りない場合は追加します。 Gemfileに次の2行を足してbundleします。

gem 'capybara'
gem 'selenium-webdriver'
gem 'webdrivers', '~> 5.0'

test_helper.rbがない場合は適当にでっち上げます。

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
  #
  # Note: You'll currently still have to declare fixtures explicitly in integration tests
  # -- they do not yet inherit this setting
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

ホストOSのChromeを動かす

https://chromedriver.storage.googleapis.com/index.html?path=103.0.5060.24/ からchromedriverをダウンロードしてきます。

次のようにtest_helper.rb中でホストOSのchromedriverを指定すると起動はします。

require 'selenium-webdriver'
Selenium::WebDriver::Chrome::Service.driver_path = '/mnt/c/Users/led_l/Downloads/chromedriver_win32/chromedriver.exe'

つぎのように127.0.0.1:9515への接続に失敗します。

/home/ledsun/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/http.rb:960:in `initialize': Failed to open TCP connection to 127.0.0.1:9515 (Connection refused - connect(2) for "127.0.0.1" port 9515) (Errno::ECONNREFUSED)

WSL2 上で起動した Selenium Webdriver や Puppeteer から Windows 側の Chrome ウィンドウを操作したかったが無理 - Neo's World

WSL 側から Windows 側を覗くには、localhost ではダメで、/etc/resolv.conf に記載の 172.xx.xx.xx な IP を使うか、PowerShell で ipconfig で確認した 192.168.xx.xx な IP を指定する必要がある

ここで、IPアドレスを設定する方法がわからず、詰まっています。

WSLのChromeを動かす

WSLにChromeをインストールして動かす方法もあるようです。 WSLにGUIを設定していないので、ヘッドレスモードで動かすオプションを設定する必要がありそうです。

WSL2で rails test:system を動かす為の設定

 options.add_argument('--headless')

こっちは試していません。

参考