> > 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.
