我试图在我的watir-webdriver脚本中使用page-object gem,我想我可能会遗漏一些东西。
这是我的log_in.rb代码: 要求“./all_deals”
class LogIn
include PageObject
text_field(:email, :id => 'UserName')
text_field(:password, :id => 'Password')
checkbox(:remember_me, :id => 'RememberMe')
button(:log_me_in, :value => 'Login')
def initialize(browser)
@browser = browser
end
def log_in (email, password)
self.email = email
self.password = password
remember_me
log_me_in
AllDeals.new(@browser)
end
end
我的home_page.rb
require "./log_in"
class HomePage
def initialize(browser)
@browser = browser
end
def visit
@browser.goto "http://treatme.co.nz/"
end
def go_to_log_in
@browser.goto "https://treatme.co.nz/Account/LogOn"
LogIn.new(@browser)
end
end
这是我的log_in_test.rb
require "rubygems"
require "test/unit"
require "watir-webdriver"
require "page-object"
require "./home_page"
class LogInTest < Test::Unit::TestCase
def setup
@browser ||= Watir::Browser.new :firefox
end
def teardown
@browser.close
end
def test_fail
@home_page = HomePage.new(@browser)
@home_page.visit
@log_in_page = @home_page.go_to_log_in
@all_deals = @log_in_page.log_in("test@gmail.com","test")
assert (@all_deals.get_title == "GrabOne Daily Deals - Buy Together, Save Together")
end
end
测试运行的结果是:
Finished tests in 22.469286s, 0.0445 tests/s, 0.0000 assertions/s.
1) Error:
test_fail(LogInTest):
NoMethodError: undefined method `text_field_value_set' for nil:NilClass
C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.2/lib/page-object/accessors.rb:142:in `block in text_field'
我正在使用带有页面对象gem 0.9.2的Ruby 1.9。
你能帮帮我吗?
同样在每个rb文件中,我需要它引用的类文件,有没有一种方法我不必每次都声明它?
非常感谢。
答案 0 :(得分:3)
解决例外问题
正在发生异常,重新定义初始化方法的LogIn页面。
class LogIn
include PageObject
def initialize(browser)
@browser = browser
end
end
当您包含PageObject时,它已经添加了一个特定的初始化方法。你的类正在重写初始化,并可能导致某些东西无法正确设置。
删除initialize
方法会让您超越该异常。
然而,您将点击remember_me
不是变量/方法异常。假设您要选中该复选框,则应为check_remember_me
。
需要类文件
我的测试文件通常需要一个需要所有page_objects的文件。它与您需要任何其他宝石或库的方式类似。
例如,我将创建一个treatme.rb
文件:
require 'log_in'
require 'home_page'
假设您需要所需顺序的文件(即首先需要其他人需要的文件),您的页面对象文件(即log_in.rb和home_page.rb)都不需要执行任何操作。
您的测试文件只需要您的treatme.rb文件。例如:
require './treatme'