2016-10-18 4 views
0

Вот мой код. Я общался с этим в течение 1,5 часов и еще не получил Capybara, чтобы щелкнуть ссылку без ошибки ElementNotFound. Посещение сайта работает так, как ожидалось, но нажатие ссылок, заполнение форм - на самом деле, взаимодействие с DOM любым способом - не удается. Любая помощь будет принята с благодарностью.Capybara :: ElementNotFound error - Супер простой пример Capybara не работает, и я не знаю, почему

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 
+0

Вы пробовали использовать xpath? Например. 'locate (" // [@ id = 'overlay "). find (" // h1 "). click' –

+0

Нет. Я просто хочу понять, почему это не работает. Это всего лишь пример «привет мир», и он продолжает терпеть неудачу. –

ответ

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

Смежные вопросы