capybara是ruby浏览器自动化测试工具,不提供ai能力;集成ai服务可通过四种方法:一、用http客户端调用外部ai api;二、用vcr录制回放真实交互;三、在页面注入ai sdk并执行js触发;四、用webmock模拟响应。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您尝试在测试环境中调用人工智能相关服务,但Capybara本身并不提供AI能力或直接暴露API接口,则可能是混淆了Capybara的定位。Capybara是一个Ruby编写的**浏览器自动化测试工具**,用于模拟用户行为并验证Web应用表现,它不内置人工智能功能,也不对外提供可调用的AI API。以下是实现AI服务集成的多种可行方法:
一、通过HTTP客户端在Capybara测试中调用外部AI API
该方法利用标准HTTP请求库(如Net::HTTP、Faraday或RestClient)在Capybara测试脚本中主动发起对AI服务(如大模型API)的请求,获取响应后驱动页面交互或断言结果。
1、在Gemfile中添加HTTP客户端依赖:
gem 'faraday', '~> 2.10'
2、在spec/support/ai_helpers.rb中定义封装方法:
def call_ai_completion(prompt)
response = Faraday.post('https://api.example-ai.com/v1/completions') do |req|
req.headers['Authorization'] = 'Bearer your_api_key_here'
req.headers['Content-Type'] = 'application/json'
req.body = { model: 'gpt-4', prompt: prompt }.to_json
end
JSON.parse(response.body)['choices'][0]['text']
end
3、在Capybara测试中调用该方法:
scenario 'submit form with AI-generated content' do
ai_text = call_ai_completion('生成一段产品介绍文案')
visit '/editor'
fill_in 'content', with: ai_text
click_button 'Publish'
expect(page).to have_content(ai_text.strip[0..20])
end
二、使用VCR录制并回放AI API真实交互
该方法通过VCR工具捕获首次运行时与AI服务的真实HTTP通信,并将其序列化为磁带(cassette)文件,后续测试直接复用该固定响应,避免依赖网络和计费,提升稳定性与速度。
1、在spec/rails_helper.rb中配置VCR:
VCR.configure do |config|
config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
config.hook_into :webmock
config.allow_http_connections_when_no_cassette = false
end
2、在测试中包裹AI调用逻辑:
VCR.use_cassette('ai_summarize_success') do
response = Faraday.post('https://api.example-ai.com/v1/summarize', { text: long_text }.to_json, { 'Content-Type' => 'application/json' })
summary = JSON.parse(response.body)['summary']
fill_in 'summary', with: summary
end
3、首次运行测试时需确保网络可达且API密钥有效,VCR将自动生成对应cassette文件;后续运行即脱离真实AI服务。
三、在页面JavaScript中注入AI SDK并由Capybara触发
该方法适用于前端已集成AI能力(如调用千帆、文心、通义等SDK)的场景。Capybara通过执行JavaScript与页面内AI逻辑交互,绕过后端代理,直接测试端到端AI行为流。
1、确认页面已加载AI SDK脚本:
<script src="https://sdk.example-ai.com/v2/baidu-ernie.js"></script>
2、在Capybara测试中执行JS调用:
page.execute_script("window.aiClient = new ErnieClient({ apiKey: 'your_ernie_api_key' });")
page.execute_script("aiClient.generate({ prompt: '写一首七言绝句' }).then(r => document.getElementById('output').innerText = r.text);")
3、等待并断言输出区域内容变化:
expect(page).to have_selector('#output', text: /春风又绿江南岸/i, wait: 15)
四、通过Mock服务拦截AI请求并返回预设响应
该方法使用WebMock在测试运行时完全屏蔽真实AI HTTP请求,强制返回开发者可控的模拟数据,适用于单元级快速验证或离线开发环境。
1、在spec/support/webmock_setup.rb中启用并配置:
require 'webmock/rspec'
WebMock.enable!
stub_request(:post, 'https://api.example-ai.com/v1/chat')
.with(
headers: { 'Authorization' => 'Bearer test-key' },
body: hash_including(model: 'qwen-plus')
)
.to_return(status: 200, body: { choices: [{ message: { content: 'AI回复已模拟完成' } }] }.to_json, headers: { 'Content-Type' => 'application/json' })
2、确保测试代码中实际发出了匹配的请求:
Faraday.post('https://api.example-ai.com/v1/chat', { model: 'qwen-plus', messages: [...] }.to_json, { 'Authorization' => 'Bearer test-key' })
3、运行测试时,该请求将被立即拦截并返回预设JSON,无需网络或密钥验证。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











