Как найти элемент? Неверная ошибка селектора (Капибара) - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь использовать page.find, чтобы найти элемент с помощью текстовой переменной (оба элемента не завершены полностью), но когда я попытался использовать локатор, я получил ошибку: недопустимый селектор: недопустимыйили был указан незаконный селектор.

Я не знаю, является ли метод неправильным или проблема в элементе html.

it 'test1' do visit 'https://www.americanas.com.br/'

    $name = box for all the boys i've loved
    $author = Jenny Han

    fill_in 'h_search-input',   with: $isbn
    click_button 'h_search-btn'

    americanas = page.find($name).text      # <- here is the error
    americanas.click

    expect(find('table tbody tr')).to have_content $author
end

Элементы HTML:

<h1 class="TitleUI-sc-1m3ayw0-16 cvOkHP TitleH1-c6mv26-0 VyqrE" icon="[object Object]">Box Book - For All The Boys I've Loved</h1>

и

<tr class="table-content__Tr-sc-6kkk7q-3 jFIPzA"><td class="table-content__Td-sc-6kkk7q-5 bPPRTT"><span class="text__TextUI-sc-1hrwx40-0 cKQvNJ">Author</span></td><td class="table-content__Td-sc-6kkk7q-5 bPPRTT"><span class="text__TextUI-sc-1hrwx40-0 cKQvNJ">Jenny Han</span></td></tr>

Что я получил:

 1) test test1
 Failure/Error: americanas = page.find($name).text

 Selenium::WebDriver::Error::InvalidSelectorError:
   invalid selector: An invalid or illegal selector was specified
     (Session info: chrome=74.0.3729.169)
     (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 6.1.7601 SP1 x86_64)
 # ./spec/teste_spec.rb:30:in `block (2 levels) in <top (required)>'

Спасибо за вашвремя!

1 Ответ

1 голос
/ 04 июня 2019

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)

Примечание: Исходя из вопросов, которые вы задавали, действительно кажется, что вы могли бы извлечь пользу из чтения документации по Капибаре и нескольких уроков по рубину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...