Capybara で XPath を用いて n 番目の要素を見つけられない
Pagination のテストのために、最初は以下のようなコードを書いていたのですが、一つのページ内に複数のPagination を表示するページなので、一番上のブロックのみを確認することにしました。
find("//*[@class='pagination']//a[text()='2']").click
expect(page.status_code).to eq(200)
これに、以下のように *[@class='pagination']
の末尾に [1]
を追加したのですが Capybara::ElementNotFound
になってしまいます。
find("//*[@class='pagination'][1]//a[text()='2']").click
expect(page.status_code).to eq(200)
Test 環境ではなく Development 環境になりますが、既に Pagination の2ページ目が存在する環境で以下のようにすれば要素を取得できることが確認できました。
doc = Nokogiri::HTML(open "http://localhost:3000/")
doc.xpath("//*[@class='pagination'][1]//a[text()='2']")
Capybara が採用している XPath と Nokogiri の XPath にはなにか違いがあるのでしょうか?
click
メソッドを呼び出さないなら使える
expect(page).to have_xpath("//*[@class='pagination'][1]//a[text()='2']")
という風に呼び出す場合ならエラーになりませんでした。