2017-12-05 29 views
1
class MainTabsWidget < PageObject::Elements::UnorderedList 
    include PageObject 
    include PageObject::PageFactory 

    link(:first_link, :text => 'First') 
    link(:second_link, :text => 'Second') 
    link(:third_link, :text => 'Third') 
    link(:category_link, :text => 'Category') 
    link(:subcat1_link, :text => 'Subcat1') 
    link(:subcat2_link, :text => 'Subcat2') 

    def goto_tab_item(tab_item) 
    items = tab_item.split /\// 
    items.each do |item| 
     case item 
     when 'First' 
      first_link 
     when 'Second' 
      second_link 
     when 'Third' 
      third_link 
     when 'Category' 
      category_link 
     when 'Subcat1' 
      subcat1_link 
     when 'Subcat2' 
      subcat2_link 
     end 
    end 
    end 
end 

PageObject.register_widget :main_menu, MainTabsWidget , :ul 

에 액세스 할 때 나는 다음과 같은 방식으로 위젯을 사용하여 방문 페이지라는 페이지를 ....이하면 ArgumentError pageobject 위젯을

class LandingPage 
    include PageObject 
    include PageObject::PageFactory 


    main_menu(:menu_tabs, :id => 'mainMenu') 


    def select_menu_item(item) 
    menu_tabs_element.go_to_tab_item item 
    end 
end 

한 시점에서이 실제로했던 일. select_menu_item에 'First'를 전달하면 first_link로 지정된 페이지로 이동합니다. 'Category/Subcat1'을 지정하면 범주 링크를 클릭 한 다음 subcat1을 클릭합니다.

Howerver, 변경된 사항. 우리는 Watir과 - webdriver 보석에서 전환 (6.10) 보석을 Watir과 할 수 있으며, 이제 코드는 menu_tabs_element 어떤 식 으로든에서 참조됩니다 때 발생 인수 exeption

'ArgumentError: wrong number of arguments (0 for 1..2)' 

을 가져옵니다. 이 문제를 해결하기위한 아이디어가 부족합니다.

스택 추적은 :

ArgumentError: wrong number of arguments (0 for 1..2) 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object/element_locators.rb:10:in `element' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object/elements/element.rb:191:in `respond_to_missing?' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object.rb:53:in `respond_to_missing?' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object.rb:70:in `respond_to?' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object.rb:70:in `initialize' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object/platforms/watir/page_object.rb:1047:in `new' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object/platforms/watir/page_object.rb:1047:in `find_watir_element' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object/platforms/watir/page_object.rb:1118:in `block in define_widget_singular_accessor' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page-object-2.2.4/lib/page-object/widgets.rb:38:in `block (3 levels) in define_accessors' 
./lib/pages/menu.rb:13:in `select_menu_item' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page_navigation-0.10/lib/page_navigation.rb:134:in `block in navigate_through_pages' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page_navigation-0.10/lib/page_navigation.rb:129:in `each' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page_navigation-0.10/lib/page_navigation.rb:129:in `navigate_through_pages' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/page_navigation-0.10/lib/page_navigation.rb:67:in `navigate_to' 
./spec/refactor/test_spec.rb:6:in `block (2 levels) in <top (required)>' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/hooks.rb:350:in `instance_exec' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/hooks.rb:350:in `run' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/hooks.rb:509:in `block in run_owned_hooks_for' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/hooks.rb:508:in `each' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/hooks.rb:508:in `run_owned_hooks_for' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/hooks.rb:460:in `run' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/example_group.rb:537:in `block in run_before_context_hooks' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/memoized_helpers.rb:186:in `block in isolate_for_context_hook' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/memoized_helpers.rb:182:in `instance_exec' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/memoized_helpers.rb:182:in `isolate_for_context_hook' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/example_group.rb:536:in `run_before_context_hooks' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/example_group.rb:589:in `run' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:118:in `map' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/configuration.rb:1896:in `with_suite_hooks' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:113:in `block in run_specs' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/reporter.rb:79:in `report' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:112:in `run_specs' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:87:in `run' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:71:in `run' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/lib/rspec/core/runner.rb:45:in `invoke' 
C:/Ruby22/lib/ruby/gems/2.2.0/gems/rspec-core-3.7.0/exe/rspec:4:in `<top (required)>' 
C:/Ruby22/bin/rspec:23:in `load' 
C:/Ruby22/bin/rspec:23:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 

1 example, 1 failure, 0 passed 

Finished in 6.087 seconds 

Process finished with exit code 1 
+0

완전한 스택 추적은 무엇입니까? - backtrace를 사용하여 실행할 수 있습니까? – titusfortner

+0

추가 스택 추적 – notinigo

+0

그 코드는 잃어버린 po 코드의 일부입니다. 그러나 해결 방법이있을지라도이 오류는 버그입니다. 나는 프로젝트에 버그를 제기하고 cheezy가 그것을 재현하고 고칠 수 있는지 알아 보겠다 : https://github.com/cheezy/page-object/issues/new – titusfortner

답변

1

이이 문제를 야기 Watir과의 어떤 변화 나에게 분명하지 않다. Page-Object의 변경 가능성이 높습니다. 어쨌든 여기에 2 가지 해결책이 있습니다. 이것은 Page-Object v 2.2.4에서 테스트되었습니다.

사용 위젯은

로는 위젯 페이지 객체 접근 방법을 포함, Alexis in Page-Object Issue 263 지적하지 똑바로 앞으로 기대 한 것 같습니다. MainTabsWidget 클래스에서 대신 include PageObject, 당신은 할 필요가 :

이 변화
extend PageObject::Accessors # to get the accessor methods 
attr_reader :platform   # the accessor methods don't work without a platform 

, 페이지 객체가 작동합니다. 페이지의 섹션을

페이지-객체를 사용

는 귀하의 요구에보다 잘 부응 할 수있는 페이지 섹션 기능이 있습니다. 그것은 코드의 일부를 단순화합니다 (위의 문제를 해결하십시오).

기본 탭 섹션을 나타내는 클래스를 정의합니다. 섹션을 등록하거나 위젯과 같이 여러 줄 설정을 할 필요가 없습니다.

class MainTabs 
    include PageObject 
    include PageObject::PageFactory 

    link(:first_link, :text => 'First') 
    link(:second_link, :text => 'Second') 
    link(:third_link, :text => 'Third') 
    link(:category_link, :text => 'Category') 
    link(:subcat1_link, :text => 'Subcat1') 
    link(:subcat2_link, :text => 'Subcat2') 

    def select_menu_item(tab_item) 
    items = tab_item.split /\// 
    items.each do |item| 
     case item 
     when 'First' 
      first_link 
     when 'Second' 
      second_link 
     when 'Third' 
      third_link 
     when 'Category' 
      category_link 
     when 'Subcat1' 
      subcat1_link 
     when 'Subcat2' 
      subcat2_link 
     end 
    end 
    end 
end 

페이지 객체는 간단하게 될 수 있습니다

class LandingPage 
    include PageObject 
    include PageObject::PageFactory 

    page_section(:menu_tabs, MainTabs, :id => 'mainMenu') 
end 

메뉴의 클릭하면 변경 것 :

page.menu_tabs.select_menu_item('First') 

(또는 당신에 LandingPage#select_menu_item 방법을 정의하기 위해 계속 수 다운 스트림 변경을 피하십시오.)