#ruby #rspec #automated-tests #capybara
#ruby #rspec #автоматизированные тесты #capybara
Вопрос:
Я пытаюсь получить все тексты из определенного CSS-селектора, которые неоднозначны в HTML. Я хотел бы получить доступ к этим неоднозначным css и получить текст, а затем вернуть всю эту информацию.
Я выяснил, как найти все неоднозначные селекторы, но я не знаю, как получить только текст из каждого селектора.
Неоднозначный селектор (он находит 3 сопоставления) .list-card-title .js-card-name
Я уже пробовал такие команды, как:
arr = Array(3)
arr = find_all('.list-card-title.js-card-name').to_a
puts arr.to_s
Когда я использую puts arr
Я получил следующий вывод [#<Capybara::Node::Element tag="span" path="/HTML/BODY[1]/DIV[2]/DIV[2]/DIV[1]/DIV[2]/DIV[3]/DIV[1]/DIV[1]/DIV[3]/DIV[1]/DIV[1]/DIV[1]/DIV[2]/A[1]/DIV[3]/SPAN[1]">, #<Capybara::Node::Element tag="span" path="/HTML/BODY[1]/DIV[2]/DIV[2]/DIV[1]/DIV[2]/DIV[3]/DIV[1]/DIV[1]/DIV[3]/DIV[1]/DIV[1]/DIV[1]/DIV[2]/A[2]/DIV[3]/SPAN[1]">, #<Capybara::Node::Element tag="span" path="/HTML/BODY[1]/DIV[2]/DIV[2]/DIV[1]/DIV[2]/DIV[3]/DIV[1]/DIV[1]/DIV[3]/DIV[1]/DIV[1]/DIV[1]/DIV[2]/A[3]/DIV[3]/SPAN[1]">]
Комментарии:
1. что означает неоднозначность в этом контексте?
Ответ №1:
Чтобы получить текст элементов, вам нужно вызвать text
каждый из элементов. В вашем случае самым простым способом сделать это было бы
find_all('.list-card-title.js-card-name').map(amp;:text)
который вернет массив текста, содержащегося в каждом из элементов. Если затем вы хотите, чтобы все это было объединено в одну строку, вы могли бы сделать
find_all('.list-card-title.js-card-name').map(amp;:text).join
Примечание: вы отметили свои вопросы automated-tests
, вы на самом деле тестируете приложение / сайт или вместо этого выполняете веб-очистку? Если вы тестируете, вам было бы намного лучше писать свои тесты, используя методы ожидания / утверждения Capybaras (и параметры :text, которые они принимают), а не находить элементы, извлекать / манипулировать содержащимся текстом, а затем что-то делать (я предполагаю, утверждая) с этим.