Ошибка Capybara::ElementNotFound — очень простой пример Capybara терпит неудачу, и я понятия не имею, почему

#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