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. watir-general@googlegroups.com http://groups.google.com/group/watir-general watir-general+unsubscr...@googlegroups.com --- 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 watir-general+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.