Ваш код Watir
js_doc = browser.element(css: '.schools').wait_until(&:present?)
возвращает элемент, но в коде Capybara вы вызываете методы предиката (has_ css?, Has_xpath?, Has_selector? И т. Д. c), которые просто вернуть истину или ложь. Эти методы предиката будут ждать, только если Capybara.predicates_wait
истинно. Есть ли конкретная c причина, по которой вы используете предикаты? Вместо этого вы можете просто find
интересующий вас элемент, который будет ждать до Capybara.default_max_wait_time
, или вы можете указать настраиваемую опцию ожидания. «Эквивалент» вашего примера Watir
js_doc = browser.element(css: '.schools').wait_until(&:present?)
schools_list = Nokogiri::HTML(js_doc.inner_html)
school_cards = schools_list.css('.box .columns .column:nth-child(2)'
при условии, что для Capybara.default_max_wait_time установлено значение, достаточно высокое для вашего приложения и настройки тестирования
school_cards = browser.find('.schools').all('.box .columns .column:nth-child(2)')
Если вам действительно нужно продлите время ожидания одной из находок, которые вы могли бы сделать
school_cards = browser.find('.schools', wait: 10).all('.box .columns .column:nth-child(2)')
, чтобы подождать до 10 секунд появления элемента .schools
. Его также можно просто свернуть в
school_cards = browser.all('.schools .box .columns .column:nth-child(2)')
, который также будет ждать (до Capybara.default_max_wait_time) хотя бы одного подходящего элемента, прежде чем вернуть его, хотя в зависимости от вашего точного HTML
school_cards = browser.all('.schools .column:nth-child(2)')
может быть таким же хорошим, но менее fr agile
Примечание: вы должны использовать движок Kimurai, который поддерживает JS - https://github.com/vifreefly/kimuraframework#available -двигатели - иначе вы не сможете взаимодействовать с сайтами Dynami c