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.
