Good news. I figured out how to minimize this message. Everything should be better in 6.14. :)
On Tuesday, September 11, 2018 at 8:54:49 AM UTC-7, Titus Fortner wrote: > > The deprecation message is thrown when rescuing a stale exception during a > call for #exists? / #visible? #present? because when we make the code > changes below, tests that rely on this behavior will fail. They need to > know about it, so there needs to be a message. Yes, the message is > happening even in use cases that won't change, so I'll need to adjust the > message. > > As for the specific code I suggested, you wouldn't be getting a stale > element warning if the element was in the DOM and merely not displayed. As > such `wait_while(&:exists?)` would do what you need it to do just fine. > Alternately, the method `#wait_while_present` should work as well since it > is constantly locating from scratch. Yes, this is just for the element > going away. To deal with the element showing up and then going away is a > completely separate concern. > > Also, for note, specific requests for changing code are better done as > github issues so I can keep track of them. > > > > > > > On Tuesday, September 11, 2018 at 5:04:45 AM UTC-7, [email protected] > wrote: >> >> element.wait_while(&:exists?) >> >> >> No, this wouldn't work, I have to wait until the element is visible, >> element becomes invisible when loading completes. >> >> And also, I am checking whether element is visible or not, I am checking >> whether previously located element exist in the DOM. So this line >> b.div().wait_until_present or b.div.wait_until(&:present) perfectly needed >> for my program. >> >> I am well aware of how element is located in selenium and WATIR. but I >> don't understand the deprecation message has to be thrown such a meaningful >> method. Please remove this message completely. >> >> Thanks. >> >> On Thursday, September 6, 2018 at 7:14:13 AM UTC+5:30, Titus Fortner >> wrote: >>> >>> 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, <[email protected]> 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, >>>>> [email protected] 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. >>>>> >>>>> [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.
