This is another example of the deprecation notice being thrown more often than it should be. I've verified that your code will work after my planned deprecation. I can't figure out how to restrict this deprecation notice, so I'll add something to the message.
Right now, to avoid that notice, you can do: element.wait_while(&:exists?) Watir and Selenium have fundamentally different ideas of what an element "is." A Selenium Element is defined by the object reference returned by the driver. If that reference is no longer valid, the element no longer exists. A Watir Element is whatever exists is at the provided locator, period. The Watir approach is more useful if you are focused on testing functionality vs implementation. When watir-webdriver was created, a lot of Selenium implementation ideas creeped into Watir. This refactoring is make the distinction more consistent with the original intentions of Watir. If a Watir user cares about the Selenium notion of what an element is, we've provided the `#stale?` method to allow you to figure out if the driver object has gone away. Additionally, for performance reasons Watir caches the Selenium element and tries to re-use it whenever possible. which adds a bit of extra complexity. If you're curious, the refactoring is going to change #exists? from this: def exists? return false if located? && stale? assert_exists true rescue UnknownObjectException, UnknownFrameException false end to this: def exists? if located? && stale? reset! elsif located? return true end assert_exists true rescue UnknownObjectException, UnknownFrameException false end and `#present?` will look like: def present? begin assert_exists @element.displayed? rescue Selenium::WebDriver::Error::StaleElementReferenceError reset! retry # (this was changed from just returning false) rescue UnknownObjectException, UnknownFrameException false end end On Wednesday, September 5, 2018 at 9:31:12 AM UTC-7, rajagopalan madasami wrote: > > Yes I am asking the former, I need to wait until spinner goes away. So > former one is necessary for me. Buy why do you plan to deprecate such a > good method which is very much necessary? > > On Wed 5 Sep, 2018, 8:06 PM Titus Fortner, <titusf...@gmail.com > <javascript:>> wrote: > >> It has to do with how Watir caches elements and being consistent in how >> it responds. >> >> "#present?" is asking "can a user see an element at this location?" >> This is different from "did the element I previously located change?" >> >> If you are asking the former, you're fine. If you are asking the latter, >> you might need to change your code. >> I can take another pass at making sure the warning is sufficiently narrow. >> >> >> >> On Wednesday, September 5, 2018 at 12:01:15 AM UTC-7, >> rajagopal...@gmail.com wrote: >>> >>> Hi Titus, >>> >>> I am getting this warning while I execute this code >>> >>>> >>>> @b.span(class: "spinner").wait_while(&:present?) >>>> >>>> >>> 2018-09-05 12:26:45 WARN Watir [DEPRECATION] ["stale_present"] Checking >>> `#present? == false` to determine a stale element is deprecated. Use >>> `#stale? == true` instead. >>> >>> If I use >>> >>> @b.span(class: "spinner").wait_until(&:stale?) >>>> >>>> >>> Watir::Exception::Error: Can not check staleness of unused element >>> >>> 0) scenario1-Contact Example >>> ?[31mFailure/Error: raise Watir::Exception::Error, "Can not check >>> staleness of unused element" unless @element?[0m >>> ?[31m?[0m >>> ?[31mWatir::Exception::Error:?[0m >>> ?[31m Can not check staleness of unused element?[0m >>> ?[36m# ./Source/FrameWorkModules/Chrome.rb:168:in >>> `waitForPageLoad'?[0m >>> ?[36m# ./Source/LoginModule/login.rb:72:in `driverSing'?[0m >>> ?[36m# ./Source/FrameWorkModules/PullTheTestCases.rb:7:in >>> `initialize'?[0m >>> ?[36m# ./Source/Contact_Create_spec.rb:36:in `new'?[0m >>> ?[36m# ./Source/Contact_Create_spec.rb:36:in `block (4 levels) in >>> <top (required)>'?[0m >>> >>> Why can't I use `@b.span(class: "spinner").wait_while(&:present?)` ? >>> Hi, I am designing a common framework for all of my project in my company >>> using WATIR. So this kind of code in my Framework level is pretty >>> important. Can you please let me know why it is deprecated? >>> >> -- >> -- >> 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-...@googlegroups.com <javascript:> >> http://groups.google.com/group/watir-general >> watir-genera...@googlegroups.com <javascript:> >> --- >> 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-genera...@googlegroups.com <javascript:>. >> 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. 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.