如何让AWS Lambda运行Chrome无头浏览器测试?

我在本地工作了。
在aws中,我遇到了错误。

文件:

run_lambda_function.rb

require_relative 'lambda_function'
lambda_handler(event: {},context: Object.new)

哪个电话

lambda_function.rb

require 'aws-sdk-lambda'
require 'time'
require 'json'
require 'rspec'
require 'capybara'
require 'capybara/rspec'
require 'webdrivers'

def lambda_handler(event:,context:)
  begin 'setup'
    Capybara.app_host = 'https://google.com'
    Capybara.register_driver :chrome do |app|
      Capybara::Selenium::Driver.new(app,browser: :chrome)
    end
    Capybara.register_driver :headless_chrome do |app|
      capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
        chromeOptions: {
          args: %w[headless enable-features=NetworkService,NetworkServiceInProcess]
        }
      )
      Capybara::Selenium::Driver.new app,browser: :chrome,desired_capabilities: capabilities
    end
    Capybara.default_driver = :headless_chrome
  end

  begin 'run test(s)'
    files = Dir.glob('spec/*_spec.rb') - ['spec/spec_helper.rb']
    p "files= #{files}"
    RSpec::Core::Runner.run(files)
  end
end

使用规范:

spec / google_spec.rb

describe 'Visit Websites',type: :feature,driver: :headless_chrome do
  it 'can visit google' do
    visit '/'
    expect(page).to have_css('div')
  end
  it 'can visit gogole/forms' do
    visit '/forms'
    expect(page).to have_css('div')
  end
end

这在本地运行,但是当我打包编码到供应商/并将其全部压缩后,将其上传到lambda(由于依赖项大于50k,因此通过S3存储桶*)并尝试在aws mgtmt控制台中运行网络驱动程序错误:

如何让AWS Lambda运行Chrome无头浏览器测试?

也许我可以使用无服务器的方法和其他方法来避免,但是我在学习的同时尽量保持简单和低水平,而没有依赖和帮助。当然可以。没有箍。

Gemfile

对于在测试时进行本地捆绑,与我上载到/ vendor并将其全部打包的代码无关(我认为)与上传代码无关(因此,它很大并且需要通过s3存储桶进行加载)

source 'http://rubygems.org'

gem 'rspec'
gem 'webdrivers'
gem 'capybara'
gem 'aws-sdk'

请注意,这与Chrome --headless for AWS Lambda?

不同
mql7777 回答:如何让AWS Lambda运行Chrome无头浏览器测试?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3165391.html

大家都在问