1

나는 내 것과 비슷한 질문을 보았다. OS X에서는 모든 것이 잘 작동하지만 우분투 14.04에서는 오류가 발생합니다. 그 게시물을 회고, 나는 같은 오류가 발생합니다. 원래의 포스터는 포기하고 대신 Poltergeist/PhantomJS를 사용했습니다. PhantomJS가 더 이상 유지 관리되지 않아서 Chrome으로이 작업을하고 싶습니다.Capybara, Selenium, headless Chrome, 우분투 Net :: ReadTimeout

Net::ReadTimeout: Net::ReadTimeout and Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start on Rails 5.1.beta System Test

가 여기 내 우분투에 설치 단계입니다

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5 
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - 
cat <<EOF > /etc/apt/sources.list.d/google-chrome.list 
deb http://dl.google.com/linux/chrome/deb/ stable main 
EOF 
apt-get update 
apt-get install --force-yes -y google-chrome-stable 
cd /root/ && curl -O "http://chromedriver.storage.googleapis.com/2.32/chromedriver_linux64.zip" 
cd /root/ && unzip chromedriver_linux64.zip && cp chromedriver /usr/bin 

는 한 번에 한 단계를 복용, 나는 chromedriver 제대로 설치 구글 크롬을 확인하고 잘 작동합니다. 셀레늄 드라이버도 잘 작동합니다.

link = ENV['LINK'] || "https://www.amazon.com" 
#https://stackoverflow.com/questions/44424200/how-do-i-use-selenium-webdriver-on-headless-chrome 
Selenium::WebDriver::Chrome.driver_path="/usr/bin/chromedriver" if RUBY_PLATFORM.include? "linux" 
options = %w[--headless --disable-gpu] 
options += %w[--binary='/usr/bin/google-chrome'] if RUBY_PLATFORM.include? "linux" 
driver = Selenium::WebDriver.for :chrome, switches: options 
driver.navigate.to "#{link}" 
driver.save_screenshot("./screen.png") 
driver.quit 

URL을 방문하는 동안 카피 바라 테스트 시간이 초과되었습니다.

session.visit "#{link}"

Net::ReadTimeout: Net::ReadTimeout 
    from /usr/lib/ruby/2.3.0/net/protocol.rb:158:in `rbuf_fill' 
    from /usr/lib/ruby/2.3.0/net/protocol.rb:136:in `readuntil' 
    from /usr/lib/ruby/2.3.0/net/protocol.rb:146:in `readline' 
    from /usr/lib/ruby/2.3.0/net/http/response.rb:40:in `read_status_line' 
    from /usr/lib/ruby/2.3.0/net/http/response.rb:29:in `read_new' 
    from /usr/lib/ruby/2.3.0/net/http.rb:1437:in `block in transport_request' 
    from /usr/lib/ruby/2.3.0/net/http.rb:1434:in `catch' 
    from /usr/lib/ruby/2.3.0/net/http.rb:1434:in `transport_request' 
    from /usr/lib/ruby/2.3.0/net/http.rb:1407:in `request' 
    from /usr/lib/ruby/2.3.0/net/http.rb:1400:in `block in request' 
    from /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' 
    from /usr/lib/ruby/2.3.0/net/http.rb:1398:in `request' 
    from /var/www/railsapp/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:107:in `response_for' 
    from /var/www/railsapp/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:58:in `request' 
    from /var/www/railsapp/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/common.rb:59:in `call' 
    from /var/www/railsapp/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:649:in `raw_execute' 
... 10 levels... 
    from /usr/bin/irb:11:in `<top (required)>' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli/exec.rb:74:in `load' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli/exec.rb:74:in `kernel_load' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli/exec.rb:27:in `run' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli.rb:332:in `exec' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli.rb:20:in `dispatch' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli.rb:11:in `start' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle:34:in `block in <top (required)>' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/friendly_errors.rb:100:in `with_friendly_errors' 
    from /usr/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle:26:in `<top (required)>' 
    from /usr/bin/bundle:23:in `load' 
    from /usr/bin/bundle:23:in `<main>' 
+1

셀레늄 테스트를 통해 카펠 바라와 셀레늄 테스트 만 다른 옵션을 셀레늄에 전달하는 이유는 무엇입니까? 브라우저 이외의 모든 옵션은 기본적으로 Selenium에 직접 전달됩니다. 따라서 테스트를 동일하게 만들려면'Capybara :: Selenium :: Driver.new (app, browser :: chrome, switches : options)'를 실행해야합니다. 귀하의 운전자 등록. 또한 실제로 실행되는 코드는 'capybara/dsl'및 'selenium-webdriver'가 필요하기 때문에 실제로 실행중인 유일한 코드가 될 수 없습니다. –

+1

또한 셀레늄이 오래되었습니다 (2.53.4는 헤드리스 크롬이 제대로 작동하지 않을 것입니다). –

+0

드라이버를 등록 할 때 selenium-webdriver를 3.5.2로 업데이트하고 제안 사항을 사용하여 옵션을 전달했습니다. 그것은 효과가있다! :) 답변에 귀하의 의견을 넣어 내가 그것을 선택합니다. – John

답변

2

헤드리스 크롬과 상대적으로 새로운 지원 chromedriver :

require 'capybara' 
include Capybara::DSL 

link = ENV['LINK'] || "https://www.amazon.com" 
options = %w[--headless --disable-gpu] 
options += %w[--binary='/usr/bin/google-chrome'] if RUBY_PLATFORM.include? "linux" 
Selenium::WebDriver::Chrome.driver_path="/usr/bin/chromedriver" if RUBY_PLATFORM.include? "linux" 
Capybara.register_driver(:headless_chrome) do |app| 
    capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: { args: options }) 
    Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities) 
end 
Capybara.javascript_driver = :headless_chrome 
session = Capybara::Session.new(:headless_chrome) 
session.visit "#{link}" 

오류는 다음과 MSG입니다. 지원을 받으려면 Selenium-webdriver를 최신 버전 (이 답변에서 3.5.2)으로 업데이트하십시오. 당신이 그 일을하면 최신 카피 바라를 사용하는 경우, 당신은 또한 단지 아니라 자신의 드라이버를 등록 할 필요가보다

if RUBY_PLATFORM.include? "linux" 
    Selenium::WebDriver::Chrome.driver_path = "/usr/bin/chromedriver" 
    Selenium::WebDriver::Chrome.path = "/usr/bin/google-chrome" 
end 
Capybara.javascript_driver = :selenium_chrome_headless 

과 함께 카피 바라 등록하여 제공된 드라이버를 사용하여 시도 할 수 있습니다.

관련 문제