页面对象gem似乎不起作用 [英] page-object gem seems not working
问题描述
我正在尝试在我的watir-webdriver脚本中使用页面对象gem,我想我可能会遗漏一些东西.
I am trying to use page-object gem in my watir-webdriver scripts and I think I might be missing something.
这是我的log_in.rb代码: 需要"./all_deals"
Here is my code for log_in.rb: require "./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
My 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
Here is my 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'
我正在将Ruby 1.9与页面对象gem 0.9.2.一起使用.
I am using Ruby 1.9 with page-object gem 0.9.2.
你能帮我吗?
在每个rb文件中,我还需要要求它引用的类文件,有没有一种方法不必每次都声明它?
Also in each of those rb file, I need to require the class files it references, is there a way I don't have to declare it every time?
非常感谢.
推荐答案
解决异常问题
正在发生异常,请重新定义初始化方法的登录页面.
That exception is occurring do to the LogIn page re-defining the initialize method.
class LogIn
include PageObject
def initialize(browser)
@browser = browser
end
end
当包含PageObject时,它已经添加了特定的初始化方法.您的班级将覆盖该初始化,并可能导致某些事情无法正确设置.
When you include PageObject, it already adds a specific initialization method. Your class is overriding that initialization and presumably causing something to not get setup correctly.
删除initialize
方法将使您摆脱该异常.
Removing the initialize
method will get you past that exception.
但是,您随后将遇到remember_me
不是变量/方法异常的情况.假设您要选中此复选框,则应为check_remember_me
.
However, you will then hit a remember_me
is not a variable/method exception. Assuming you want to check the checkbox, it should be check_remember_me
.
需要课程文件
通常我的测试文件需要一个文件,该文件需要我的所有page_objects.这与您需要任何其他gem或库的概念类似.
I usually have my test file require a file that requires all my page_objects. It is a similar concept to how your would require any other gem or library.
例如,我将使用以下内容创建一个treatme.rb
文件:
For example, I would create a treatme.rb
file with:
require 'log_in'
require 'home_page'
假设您按要求的顺序要求文件(即首先需要其他人需要的文件),则您的页面对象文件(即log_in.rb和home_page.rb)都不需要做任何要求.
Assuming you require the files in the required order (ie files that are needed by others are required first), none of your page object files (ie log_in.rb and home_page.rb) should need to do any requiring.
您的测试文件将只需要您的Treatme.rb文件.示例:
Your test files would then just require your treatme.rb file. Example:
require './treatme'
这篇关于页面对象gem似乎不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!