Watir 6.18 is now available on RubyGems. As (one of?) the last 6.x release before Watir 7, this release adds some deprecations necessary for us to add the improvements we want for Watir 7. Most changes are for browser windows, with some updates to select lists and element collections.
To install:
or in your Gemfile:
Browser Windows
The biggest deprecation is :index
as a window locator, and the use of indexing
(#[]
, #first
, #last
) on window collections. You can read
the explanation here.
Because the vast majority of the time, there is only one other window you need to
work with, there is now a Browser#switch_window
method. It can only be used if
there are 2 windows, and all it does is switch to the other window. This should be
sufficient for the vast majority of users:
Still, it’s only fair to add a locator since one is being taken away.
Introducing the new :element
locator which allows you to select a window
based on a unique element on the page:
Also, to make sure people don’t continue to use indexing with an Array
of Window
instances,
Browser#windows
now returns a new WindowCollection
object with the
deprecation notices. This object will
let us do some interesting things in the future, but right off it’s hooked up
to use Watir’s powerful waiting functionality, so you can do things like:
Waiting for Multiple Elements
Many users do a lot of work with collections of elements instead of
specific elements, which means that many of Watir’s best synchronization
functionality has not been available to them. Similar to what we did
with WindowCollection
, we’ve hooked up ElementCollection
to use
Watir’s waiting features. You can now do things like:
To accomplish this, Watir will now relocate the collection whenever
an enumerable method is used. It shouldn’t be an issue for you unless you are doing a lot of
size calls on the same collection. Indexing and iterating with ElementCollection#to_a
won’t
be affected.
So Long Select All
There is a lot of overhead to treating a select list like it might
be a multiple select list, especially when multiple select lists are not very common.
Way back in Watir 6.6 I had this
brilliant idea for optimizing Select Lists.
If we use Select#select
for non-multiple select lists and
Select#select_all
for multiple select lists, it makes it really easy to
only do the performance expensive things when needed.
Except…
It turns out that we couldn’t easily completely stop using #select
for multiple
select lists, and there are some advantages for automatic form filling implementations
to have everything necessary go through one method. So, Select#select_all
and Select#select_all!
are now deprecated, and I apologize for making people move to them only to ask them to
move back away from them.
If you are working with a multiple select list and you want to select multiple
things, you now need to pass in what you want to be selected as an Array
, even
if it is just one thing (like a Regexp
instance):
See the Changelog for the complete history of updates.