You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中将Scenario Outline封装到SitePrism类运行触发NameError问题

修复方案

错误根因

报错本质是变量作用域不匹配:_email、_pswd是step_definition代码块的局部参数,仅在对应的When块内有效。你封装到CreateScreenLogin类的invalid_login方法没有定义对应入参,方法内部无法跨作用域访问step层的变量,因此抛出未定义变量的NameError。
同时你代码中的调用写法Screen_login.invalid_login也存在错误:你定义的invalid_login是类的实例方法,不能直接用类名调用,需要先实例化类对象再调用。


修复代码

1. 调整SitePrism类定义,给方法加上入参

class CreateScreenLogin < SitePrism::Page
  include RSpec::Mocks::ExampleMethods::ExpectHost
  include RSpec::Matchers 

  element :input_user, "#usuario"  
  element :input_pswd, "#senha"
  element :btn_enter, "#btn-submit" 
     
  # 新增两个入参接收邮箱、密码值
  def invalid_login(_email, _pswd)
     input_user.set(_email).send_keys(:tab)
     input_pswd.set(_pswd).send_keys(:tab)
     btn_enter.click
  end
end

2. 调整step_definition的调用逻辑,传入参数

When('to provide {string} or {string} inválids') do |_email, _pswd|
  # 先实例化页面对象,再调用方法并传入step拿到的两个参数
  screen_login = CreateScreenLogin.new
  screen_login.invalid_login(_email, _pswd)
end

内容的提问来源于stack exchange,提问作者Tadeu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:24:01