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
相关产品推荐
相关产品推荐

