NameError: uninitialized constant when calling my PageObject using Test-Factory gem
NameError: uninitialized constant when calling my PageObject using Test-Factory gem
我已经为这个问题苦苦挣扎了一段时间。我看了太多帖子,甚至尝试了另一个类似的 gem (Page-Object),结果相同。
关于如何实例化我猜的对象,我似乎遗漏了一点。
如果有人能赐教,我将不胜感激。
最佳,
JFF
这是我按照 https://github.com/KualiCo/TestFactory:
的说明构建的脚本
Base_Page.rb
class MainPage < PageFactory
class << self
def basic_element
action(:my_request_is) { |b| b.text_field(name: 'q').set }
action(:search) { |b| b.button(name: 'btnK').click }
end
end
end
search_spec.rb
require 'watir'
require 'test-factory'
require './lib/Base_Page'
include Foundry
RSpec.configure do |config|
browser = Watir::Browser.new :firefox
config.before(:all) { @b = browser }
config.before(:each) { @b.goto("http://google.com") }
config.after(:suite) { browser.close unless browser.nil? }
end
describe 'Search_Page' do
it 'allows me to search for a DataObject' do
on_page MyPage do |page|
page.my_request_is "Hello World"
end
end
end
错误
> Search_Page allows me to search for a DataObject (FAILED - 1)
>
> Failures:
>
> 1) Search_Page allows me to search for a DataObject
> > Failure/Error:
> > > on_page MyPage do |page|
> > > > page.my_request_is "Hello World"
> > > end
>
> NameError:
> uninitialized constant MyPage
> # ./spec/search_spec.rb:20:in `block (2 levels) in <top (required)>'
>
> Finished in 3.37 seconds (files took 7.25 seconds to load) 1 example,
> 1 failure
>
> Failed examples:
>
> rspec ./spec/search_spec.rb:18 # Search_Page allows me to search for a
> DataObject
有几个问题:
- 页面 class 名称不匹配 - MainPage` 与 MyPage。
on_page
假设浏览器存储在@browser
(不是@b
)。
- 在 MainPage class 中,
class << self
用于类基础页面 classes 以定义可以包含在特定页面 classes 中的部分。由于此时您没有使用基数 class,因此可以将其删除。
- 定义my_request_is的块需要接受提供的参数。
尝试以下操作:
class MainPage < PageFactory
action(:my_request_is) { |v, b| b.text_field(name: 'q').set(v) }
action(:search) { |b| b.button(name: 'btnK').click }
end
RSpec.configure do |config|
browser = Watir::Browser.new :chrome
config.before(:each) { @browser = browser }
config.before(:each) { @browser.goto("http://google.com") }
config.after(:suite) { browser.close unless browser.nil? }
end
describe 'Search_Page' do
it 'allows me to search for a DataObject' do
on_page MainPage do |page|
page.my_request_is "Hello World"
end
end
end
我已经为这个问题苦苦挣扎了一段时间。我看了太多帖子,甚至尝试了另一个类似的 gem (Page-Object),结果相同。
关于如何实例化我猜的对象,我似乎遗漏了一点。
如果有人能赐教,我将不胜感激。
最佳,
JFF
这是我按照 https://github.com/KualiCo/TestFactory:
的说明构建的脚本Base_Page.rb
class MainPage < PageFactory
class << self
def basic_element
action(:my_request_is) { |b| b.text_field(name: 'q').set }
action(:search) { |b| b.button(name: 'btnK').click }
end
end
end
search_spec.rb
require 'watir'
require 'test-factory'
require './lib/Base_Page'
include Foundry
RSpec.configure do |config|
browser = Watir::Browser.new :firefox
config.before(:all) { @b = browser }
config.before(:each) { @b.goto("http://google.com") }
config.after(:suite) { browser.close unless browser.nil? }
end
describe 'Search_Page' do
it 'allows me to search for a DataObject' do
on_page MyPage do |page|
page.my_request_is "Hello World"
end
end
end
错误
> Search_Page allows me to search for a DataObject (FAILED - 1)
>
> Failures:
>
> 1) Search_Page allows me to search for a DataObject
> > Failure/Error:
> > > on_page MyPage do |page|
> > > > page.my_request_is "Hello World"
> > > end
>
> NameError:
> uninitialized constant MyPage
> # ./spec/search_spec.rb:20:in `block (2 levels) in <top (required)>'
>
> Finished in 3.37 seconds (files took 7.25 seconds to load) 1 example,
> 1 failure
>
> Failed examples:
>
> rspec ./spec/search_spec.rb:18 # Search_Page allows me to search for a
> DataObject
有几个问题:
- 页面 class 名称不匹配 - MainPage` 与 MyPage。
on_page
假设浏览器存储在@browser
(不是@b
)。- 在 MainPage class 中,
class << self
用于类基础页面 classes 以定义可以包含在特定页面 classes 中的部分。由于此时您没有使用基数 class,因此可以将其删除。 - 定义my_request_is的块需要接受提供的参数。
尝试以下操作:
class MainPage < PageFactory
action(:my_request_is) { |v, b| b.text_field(name: 'q').set(v) }
action(:search) { |b| b.button(name: 'btnK').click }
end
RSpec.configure do |config|
browser = Watir::Browser.new :chrome
config.before(:each) { @browser = browser }
config.before(:each) { @browser.goto("http://google.com") }
config.after(:suite) { browser.close unless browser.nil? }
end
describe 'Search_Page' do
it 'allows me to search for a DataObject' do
on_page MainPage do |page|
page.my_request_is "Hello World"
end
end
end