NameError: неинициализированная константа при вызове моего PageObject с использованием гема Test-Factory

Некоторое время я боролся с этой проблемой. Я просмотрел слишком много постов и даже попробовал другой похожий камень (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

1 ответ

Решение

Есть пара вопросов:

  • Имена классов страниц не совпадают - MainPage` против MyPage.
  • on_page предполагает, что браузер хранится в @browser (не @b).
  • В классе MainPage class << self используется в базовых классах страниц для определения разделов, которые могут быть включены в определенные классы страниц. Поскольку в этот момент вы не используете базовый класс, его можно удалить.
  • Блок для определения 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
Другие вопросы по тегам