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']")

という風に呼び出す場合ならエラーになりませんでした。