如何创建和调用参数化页面对象类

时间:2015-08-28 13:20:47

标签: ruby rspec page-object-gem

我正在使用页面工厂visiton方法从ruby中的spec文件调用页面对象类。我想知道如何参数化页面对象类,使用页面工厂方法从spec文件传递参数。

我想在页面对象类中记录所有步骤信息。为此,我使用logger gem创建了一个登录spec文件。我需要将日志对象作为输入参数传递给页面类来捕获数据。这是我用来执行此操作的代码。

调用网页类的规范文件:

require './lib/pages/Test_page'
file="logs/uniusecase_#{@ncs_server['build_no']}_#{@ncs_server['test_type']}_#{time}.log"
$log=Logger.new(file)

describe 'testcase-1',:sanity do
     visit Testpage, using_params: {logger: $log} do |page|   
      end
end

页面对象类:

class Testpage
 include PageObject 
 log = "<%=params[:logger]%>"
  def goto
   log ("test msg-1")
  end

  def testmethod() 
   log("test msg -2") 
  end 
end

我在执行时收到"NameError: undefined local variable or method `log'错误消息。有人可以帮我这么做吗?

1 个答案:

答案 0 :(得分:0)

:using_params存储在班级&#39; @merged_params变量。你可以这样做:

self.class.instance_variable_get(:@merged_params)

所以你的方法看起来像:

def goto
  logger = self.class.instance_variable_get(:@merged_params)[:logger]
  logger("test msg-1")
end

但是,如果要在全局变量中定义记录器,则它已经可用于页面对象类(即,您不需要传递它)。换句话说,你可以简单地做:

def goto
  $log ("test msg-1")
end