2016-06-19 1 views
1

Попытка написать простой пример водосвинку против Google, но получитьнеопределенный метод `посетить» для Selenium WebDriver :: :: Driver

undefined method `visit' for #<Selenium::WebDriver::Driver:0x000000055f8cc8> 

я могу использовать

driver.get("http://www.google.com/") 

, но я не могу использовать

driver.visit("http://www.google.com/") 

у меня есть:

require "rspec" 
require 'selenium-webdriver' 
require "capybara" 
require "capybara/rspec" 
require "capybara/dsl" 

RSpec.configure do |config| 
    config.include Capybara::DSL 
end 

Capybara.configure do |config| 
    config.run_server = false 
    config.default_driver = :selenium 
    config.app_host = 'https://www.google.com' 
end 

describe "Google Search", type: :feature do 

    it "Tests Google" do 
    driver = Selenium::WebDriver.for :chrome 
    driver.visit "http://www.google.com/" <-- Error 
    fill_in('input', with: '123') 
    find_element('input', "Google Search").click 
    driver.quit 
    end 

end 

Обратите внимание, что я должен использовать хром, поскольку моя настройка selenium firefox не синхронизирована (общая проблема с течением времени - не удается запустить firefox через 60 секунд). Но Chrome работает, и браузер появляется.

Этот простой рубин единственный пример делает работы, однако так кажется, что какой-то вопрос RSpec установки

require 'rubygems' 
require 'selenium-webdriver' 

driver = Selenium::WebDriver.for :chrome 
driver.get "http://google.com" 

element = driver.find_element :name => "q" 
element.send_keys "Cheese!" 
element.submit 

puts "Page title is #{driver.title}" 

wait = Selenium::WebDriver::Wait.new(:timeout => 10) 
wait.until { driver.title.downcase.start_with? "cheese!" } 

puts "Page title is #{driver.title}" 
driver.quit 

ответ

1

Вы не должны использовать драйвер напрямую - вы должны называть визит на сессии (если вы «Управление собственными сеансами вы будете называть его любой переменной, которую вы использовали, если вы позволяете Capybara управлять сеансами, которые вы должны называть на странице).

Причина, по которой Firefox не работает для вас, заключается в том, что Firefox 47 сломал что-то с селеном - https://github.com/SeleniumHQ/selenium/issues/2110 - он будет исправлен в версии 47.0.1 в ближайшее время, или вы можете вернуться к 46. Если вы хотите придерживаться хрома вы должны зарегистрировать версию драйвера с использованием хрома в вашей спецификации/rails_helper и указать, что

Capybara.register_driver :selenium_chrome do |app| 
    Capybara::Selenium::Driver.new(app, :browser => :chrome) 
end 

Capybara.default_driver = :selenium_chrome # for most people this would normally be assigned to javascript_driver, but since you're using selenium for all tests we can just assign to default_driver 

Тогда вы бы просто сделать

describe "Google Search", type: :feature do 

    it "Tests Google" do 
    page.visit "http://www.google.com/" #technically the page may not be required here but it can prevent method name collisions with other libraries 
    page.fill_in('input', with: '123') 
    find_element('input', "Google Search").click # I'm guessing this is your own defined method since Capybara doesn't have a find_element method? 
    end  
end 
Смежные вопросы