#ruby-on-rails #ruby #capybara
#ruby-on-rails #ruby #capybara
Вопрос:
Вот мой код. Я возился с этим в течение 1,5 часов и до сих пор не заставил Capybara щелкнуть ссылку без ошибки ElementNotFound. Посещение сайта работает так, как ожидалось, но переход по ссылкам, заполнение форм — на самом деле, взаимодействие с DOM любым способом — терпит неудачу. Буду признателен за любую помощь.
require 'capybara'
require 'capybara/dsl'
class Prowler
include Capybara::DSL
def initialize
Capybara.run_server = false
Capybara.default_driver = :selenium
end
def visitSite
session = Capybara::Session.new(:selenium)
session.visit "https://www.cnn.com"
click_link 'Entertainment'
end
end
prowler = Prowler.new
prowler.visitSite
Комментарии:
1. Вы пробовали использовать xpath? Например.
locate("//[@id='overlay'").find("//h1").click
2. Нет. Я просто хочу выяснить, почему это не работает. Это всего лишь пример «hello world», и он продолжает терпеть неудачу.
Ответ №1:
Это сбой, потому что вы не вызываете click_link в сеансе, в котором вы посетили URL. Включив Capybara::DSL, вы сделали все методы Capybaras доступными для объекта, и когда вы вызываете, click_link
вы на самом деле вызываете Capybara.current_session.click_link
. Однако вы создали свой собственный сеанс, который не является Capybara.current_session, поэтому вам либо нужно разрешить Capybara управлять сеансом (что в вашем случае использования, вероятно, не будет хорошо работать, поскольку кажется, что вам нужен сеанс для каждого экземпляра класса)
visit 'www.cnn.com'
click_link 'Entertainment'
или не включайте Capybara::DSL и вместо этого управляйте собственным сеансом для каждого экземпляра класса, как вы делаете, и вызывайте методы в сеансе
session = Capybara::Session.new(:selenium)
session.visit "https://www.cnn.com"
session.click_link 'Entertainment'
смотрите https://github.com/jnicklas/capybara#using-sessions