find
принимает тип селектора (по умолчанию: css), локатор, а затем параметры - и возвращает один соответствующий элемент. В вашем коде
americanas = page.find($name).text
americanas.click
Вы не передаете тип селектора в find
, поэтому предполагается, что это: css, но затем вы передаете случайную строку текста (я предполагаю, что это строка, но в вашем коде нет кавычек вокруг нее, хотя ?) который не является допустимым селектором CSS - отсюда и ошибка. После этого вы вызываете text
для результата find
, который (если ваша находка была правильной) получит текст из элемента (в виде строки), а затем вы вызываете click
для строки, которая не имеет смысл, поскольку click
поддерживается только для элементов. Я думаю, что вы пытаетесь сделать, это
page.find('h1', text: $name).click
, но даже это потерпит неудачу, потому что у вас есть $name = "box for all the boys i've loved"
, но содержимое h1 - "Коробка с книгами - для всех мальчиков, которых я любил", что не соответствует ни содержанию, ни случаю. Вы можете использовать регулярное выражение без учета регистра, выполнив что-то вроде
page.find('h1', text: /for all the boys i've loved/i).click
но все зависит от того, что вы на самом деле пытаетесь сделать.
Тогда, если ваша таблица содержит более одной строки таблицы, ваше ожидание должно быть примерно таким:
expect(page).to have_selector('tr', text: $author)
Примечание: Исходя из вопросов, которые вы задавали, действительно кажется, что вы могли бы извлечь пользу из чтения документации по Капибаре и нескольких уроков по рубину.