12345678910111213141516171819202122232425262728293031323334 |
- class Capybara::Node::Element
- # This is an extension to each node to check if the element
- # is moving or in a fixed position. This is especially helpful
- # for animated elements that cause flanky tests.
- # NOTE: In CI env a special sleep is performed between checks
- # because animations can be slow.
- #
- # @param [Integer] checks the number of performed movement checks
- #
- # @example
- # find('.clues-close').in_fixed_position.click
- # => waits till clues moved to final position and performs click afterwards
- #
- # @raise [RuntimeError] raised in case the element is
- # still moving after max number of checks was passed
- #
- # @return [Capybara::Node::Element] the element/node
- def in_fixed_position(checks: 100, wait: 0.2)
- previous = native.location
- (checks + 1).times do
- sleep wait
- current = native.location
- return self if previous == current
- previous = current
- end
- raise "Element still moving after #{checks} checks"
- end
- end
|