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]
> <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,
>> [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] <javascript:>
>> http://groups.google.com/group/watir-general
>> [email protected] <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 [email protected] <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.
[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.