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.

Reply via email to