I have created a framework where I specifically asked them to use click and clickAndWait separately , click will simply performs the WATIR click, clickAndWait will perform the WATIR click and call the function waitForLoad as you have seen. So if such a hook is available that would be easy for me.
On Tue 7 Aug, 2018, 11:24 PM Titus Fortner, <[email protected]> wrote: > It's more than that when running remotely, though. Definitely use it if it > makes sense regardless of local or remote, but if you've solved your issue > by just wrapping the select method, that's targeted and "better." :) > > > > On Tuesday, August 7, 2018 at 10:41:36 AM UTC-7, Justin Ko wrote: >> >> I agree that adding it to the after hooks adds overhead. Though at 0.015s >> per click, it's not the worst thing in the world. >> >> I worked on one application where almost every button/link click >> triggered a loading overlay. Creating a method for each button/link to add >> the wait would defeat the purpose of using the Page Object gem. As with >> anything, the "better way" really depends on the application you're testing. >> >> Justin >> >> >> On Tuesday, August 7, 2018 at 1:00:37 PM UTC-4, [email protected] >> wrote: >>> >>> Okay, I will be waiting for that then! There was a new project in my >>> company for which I convinced them to use WATIR instead of Selenium where I >>> had to implement this waiting behavior! Okay excited to see this new >>> feature to be added! Thanks. >>> >>> On Tuesday, August 7, 2018 at 10:24:55 PM UTC+5:30, Titus Fortner wrote: >>>> >>>> you'll be able to specify the exact desired behaviours in a more >>>> granular way >>>> >>>> On Tue, Aug 7, 2018, 9:53 AM <[email protected]> wrote: >>>> >>>>> Oh okay. But you said >>>>> >>>>> The Executor class when implemented will open up a lot more >>>>>> flexibility. >>>>> >>>>> >>>>> So will it be lesser wire call after Executor class implemented? Can I >>>>> add after that? >>>>> >>>>> On Tuesday, August 7, 2018 at 10:18:51 PM UTC+5:30, Titus Fortner >>>>> wrote: >>>>>> >>>>>> No, your way is better if it is working for you. Adding it to the >>>>>> after hook will add a ton more unnecessary calls to your code. >>>>>> >>>>>> >>>>>> On Tue, Aug 7, 2018 at 9:38 AM <[email protected]> wrote: >>>>>> >>>>>>> That will be interesting, I am using as shown below, >>>>>>> >>>>>>>> >>>>>>>> def selectAndWait(locator, value) >>>>>>>> select locator, value >>>>>>>> waitForPageLoad >>>>>>>> end >>>>>>>> >>>>>>>> def waitForPageLoad >>>>>>>> @b.wait_until(timeout: @Page_Load) {@b.execute_script("return >>>>>>>> (jQuery.active === 0)").eql? true} >>>>>>>> end >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> Let me try using this `after_hook`, a very interesting idea indeed. >>>>>>> On Tuesday, August 7, 2018 at 9:59:47 PM UTC+5:30, Titus Fortner >>>>>>> wrote: >>>>>>>> >>>>>>>> after any action that changes or is likely to change the dom, so it >>>>>>>> can get heavy if overused. The Executor class when implemented will >>>>>>>> open up >>>>>>>> a lot more flexibility. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Aug 7, 2018, 9:27 AM <[email protected]> wrote: >>>>>>>> >>>>>>>>> Ah! that's pretty interesting, I was not knowing this. So you say >>>>>>>>> Once I have written this code, this code will be executed after every >>>>>>>>> click >>>>>>>>> I do? >>>>>>>>> >>>>>>>>> On Tuesday, August 7, 2018 at 9:54:17 PM UTC+5:30, Titus Fortner >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> jquery_wait = lambda { |br| br.wait_until { |b| >>>>>>>>>> b.execute_script('return jQuery.active == 0') } } >>>>>>>>>> browser.after_hooks.add(jquery_wait) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tuesday, August 7, 2018 at 9:17:32 AM UTC-7, >>>>>>>>>> [email protected] wrote: >>>>>>>>>>> >>>>>>>>>>> Hi Justin, >>>>>>>>>>> >>>>>>>>>>> We are also using this wait_for_ajax in one of our Project. You >>>>>>>>>>> said >>>>>>>>>>> >>>>>>>>>>> I would suggest adding the jQuery.active check to your browser's >>>>>>>>>>>> after_hooks. Ideally this would catch all (or at least most) of the >>>>>>>>>>>> problems. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> May I know how to do this? >>>>>>>>>>> >>>>>>>>>>> On Tuesday, August 7, 2018 at 9:37:42 PM UTC+5:30, Justin Ko >>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> The #wait_for_ajax simplifies things if you need to manually >>>>>>>>>>>> call it. However, it sounds like you would have to sprinkle this >>>>>>>>>>>> everywhere. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Note that there would be a small performance hit of making this >>>>>>>>>>>> check after each click/goto. However, if it's an AJAX heavy >>>>>>>>>>>> application, >>>>>>>>>>>> it's probably worth it. >>>>>>>>>>>> >>>>>>>>>>>> Justin >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Tuesday, August 7, 2018 at 11:36:54 AM UTC-4, Titus Fortner >>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Found it >>>>>>>>>>>>> >>>>>>>>>>>>> See the section on Waiting for AJAX Calls here: >>>>>>>>>>>>> http://cheezyworld.com/2012/02/23/page-object-0-6-2-released/ >>>>>>>>>>>>> let's you call `wait_for_ajax` where you want it. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Aug 7, 2018 at 7:43 AM NaviHan <[email protected]> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> > >>>>>>>>>>>>> > Yes Justin, That was exactly what happened. I ran the script >>>>>>>>>>>>> a few times and using "Watir::Wait.until(timeout: 30) >>>>>>>>>>>>> {@browser.execute_script('return jQuery.active == 0')}" never >>>>>>>>>>>>> gave me the >>>>>>>>>>>>> error " >>>>>>>>>>>>> > >>>>>>>>>>>>> > Element <span class="swatchanchor-value">...</span> is not >>>>>>>>>>>>> clickable at point (537, 362). Other element would receive the >>>>>>>>>>>>> click: <div >>>>>>>>>>>>> class="loader-bg"></div>" >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> > The code is >>>>>>>>>>>>> > >>>>>>>>>>>>> > def select_online_size (size) >>>>>>>>>>>>> > Watir::Wait.until(timeout: 30) >>>>>>>>>>>>> {@browser.execute_script('return jQuery.active == 0')} >>>>>>>>>>>>> > sizes_online_elements.find {|el| el.when_present.text.eql? >>>>>>>>>>>>> size}.click >>>>>>>>>>>>> > end >>>>>>>>>>>>> > >>>>>>>>>>>>> > I was expecting that the "when_present" method would not >>>>>>>>>>>>> give any timing issue because this waits until the element is >>>>>>>>>>>>> present. >>>>>>>>>>>>> Somehow this evaulates to true at the same time the spinner which >>>>>>>>>>>>> is >>>>>>>>>>>>> loading while the Ajax is running receives the click. >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> > Is there a PO way to resolve this , I mean without having to >>>>>>>>>>>>> use the "jQuery" statement >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> > Cheers >>>>>>>>>>>>> > >>>>>>>>>>>>> > Navi >>>>>>>>>>>>> > >>>>>>>>>>>>> > On Friday, 3 August 2018 15:12:45 UTC+10, NaviHan wrote: >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> I have a functionality where I click an a link from an >>>>>>>>>>>>> email a voucher gets added to the shopping cart and a pop up >>>>>>>>>>>>> appears with a >>>>>>>>>>>>> message. Im trying to assert the text in the popup >>>>>>>>>>>>> >> I have defined the element as >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> div(:cta_description, :css => >>>>>>>>>>>>> '.homepage-clicktoactiavte-description') >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> Tried to use a mix of Watir and Pageobejct to read the >>>>>>>>>>>>> text. The below code works 5 out of 10 times. >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> @rewards_popup_txt = >>>>>>>>>>>>> Watir::Wait.until{cta_description_element}.text >>>>>>>>>>>>> >> @rewards_popup_txt = >>>>>>>>>>>>> @rewards_popup_txt.gsub(/[^$,.A-Za-z0-9]/," ") >>>>>>>>>>>>> >> return @rewards_popup_txt >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> Tried using, which doesnt even set the @reward_popup_txt >>>>>>>>>>>>> and shows error >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> if (Watir::Wait.while {cta_description_element.visible?}) >>>>>>>>>>>>> >> @rewards_popup_txt = cta_description_element.text >>>>>>>>>>>>> >> end >>>>>>>>>>>>> >> @rewards_popup_txt = >>>>>>>>>>>>> @rewards_popup_txt.gsub(/[^$,.A-Za-z0-9]/," ") >>>>>>>>>>>>> >> return @rewards_popup_txt >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> Error >>>>>>>>>>>>> >> NoMethodError: undefined method `gsub' for nil:NilClass >>>>>>>>>>>>> >> >>>>>>>>>>>>> ./features/support/pages/Frontend/Cotton_On/Loyalty_Page.rb:22:in >>>>>>>>>>>>> `rewards_popup_description' >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> Any stable way to do the job? >>>>>>>>>>>>> > >>>>>>>>>>>>> > -- >>>>>>>>>>>>> > -- >>>>>>>>>>>>> > 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. >>>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>> -- >>>>>>>>> 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. >>>>>>>>> >>>>>>>> -- >>>>>>> -- >>>>>>> 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. >>>>>>> >>>>>> -- >>>>> -- >>>>> 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. >>>>> >>>> -- > -- > 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. > -- -- 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.
