Hi,

1. The monkey patch is redefining the method. Last definition wins. It is 
how Ruby is designed, nothing specific to Page-Object. A simpler isolated 
example:

def a
  'hi'
end


def a
  'bye'
end


puts a
#=> "bye"

Notice that you can define the method twice, but when called, the last 
definition wins.


2. This is a scenario where you will want to use the widget feature 
(https://github.com/cheezy/page-object/wiki/Custom-page-object-elements-by-using-widgets).
 
The code would be:

# A class to represent your control (ie div that acts like a button)
class DivButton < PageObject::Elements::Div
  def self.accessor_methods(accessor, name)
    # Adds method to perform click
    accessor.send(:define_method, "#{name}") do
      self.send("#{name}_element").click
    end
  end
end
PageObject.register_widget :div_button, DivButton, :div


class MyPage
  include PageObject
 
  # Use div_button instead of div to use your widget
  div_button(:expand_perks_section_icon, :css => '.icon-plus-wrapper')
end


page = MyPage.new(browser)
page.expand_perks_section_icon #=> triggers click on div
page.expand_perks_section_icon? #=> has standard method to check element 
existence (or presence with the monkey patch)


Hope that helps,
Justin


On Friday, February 1, 2019 at 6:17:10 PM UTC-5, NaviHan wrote:
>
> Thanks Justin..
> I have two more question though.
>
> 1. How does the the method in monkey_path.b takes precedence over the 
> method in actual page-object gem?
> 2. There are may intances in the application where a div element receives 
> the click rather than a button.
>
> eg
>   div(:expand_perks_section_icon, :css => '.icon-plus-wrapper')
>
>
>
> This element is  a div and receives the click as shown below.
>   def expand_perks_section
>     expand_perks_section_icon_element.when_present.click
>   end
>
>
>
> Writing a separate method each time for such things is really a pain.
> Is there a better solution for such cases
>
> On Friday, 1 February 2019 00:11:33 UTC+11, NaviHan wrote:
>>
>> I have an element defined as
>>
>> div(:reward_history, :class => 'reward-history-header')
>>
>>
>> The page-object gem generated four methods for this element which are
>>
>>
>> 'reward_history', 'reward_history_element', and 'reward_history?'
>>
>>
>>
>> The fourth method 'reward_history?' check if the element exists in the 
>> DOM?
>>
>>
>> But what if the element exists in the DOM but is hidden, which is 
>> basically checking if the element is present?
>>
>>
>> Is there an autogenerated method for this?
>>
>> I tried 'reward_history(:&present?)' but didn't work
>>
>> As of now I have to write a method separately which does this
>>
>>   def is_reward_history_present?
>>     return reward_history_element.present?
>>   end
>>
>>
>>
>>

-- 
-- 
Before posting, please read 
https://github.com/watir/watir_meta/wiki/Guidelines-for-Posting-to-Watir-General-Google-Group.
 
In short: search before you ask, be nice.

[email protected]
http://groups.google.com/group/watir-general
[email protected]
--- 
You received this message because you are subscribed to the Google Groups 
"Watir General" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to