Sooey

2018-06-05 21:29:40 +0900

Capybara 3.0.0にてCapybara::Element::Node#textなどの戻り値が変化する仕様変更があった

Capybara 3.0.0(厳密には3.0.0.rc2)にて、

  • Visibile text whitespace is no longer fully normalized in favor of being more in line with the WebDriver spec for visible text

という仕様変更が行われた結果、

element = page.first('.some-element')
expect(element).to have_content("Foo\nBar")

のように Capybara::Element::Node のコンテンツに対して「改行」や「連続する空白文字」を期待値としているテストが失敗するようになりました(実際の値として返される文字列が Foo Bar のようになるため)。

これはどうやら、「ブラウザ上での表示に近い文字列を返す」ようにする意図の変更のようです。

従来どおりにテストを成功させるための対応としては、

element = page.first('.some-element')
expect(element.native.text).to have_content("Foo\nBar")

のようにネイティブなオブジェクト経由で文字列を取得するようにすればよさそうです。