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.

Reply via email to