reuse and reduces duplication Makes tests readable Makes tests more robust (less brittle) Improves maintainability, particularly if the application is rapidly evolving
Consolidates the code for interacting with any given UI element Exposes methods that reflect the things a user can see and do on that page Hides the details of telling the browser how to do those things
a t i r - w e b d r i v e r ' b r o w s e r = W a t i r : : B r o w s e r . n e w : c h r o m e b r o w s e r . g o t o " h t t p : / / t r a n s l a t e . g o o g l e . c o m / " b r o w s e r . d i v ( i d : " g t - s l - g m s " ) . c l i c k m e n u = b r o w s e r . d i v ( i d : " g t - s l - g m s - m e n u " ) m e n u . w h e n _ p r e s e n t . d i v ( c l a s s : " g o o g - m e n u i t e m " , t e x t : " N o r w e g i a n " ) . c l i c k p u t s b r o w s e r . d i v ( c s s : " . j f k - b u t t o n - c h e c k e d " ) . t e x t b r o w s e r . t e x t _ f i e l d ( i d : " s o u r c e " ) . s e t ( " o s t " ) r e s u l t _ b o x = b r o w s e r . s p a n ( i d : " r e s u l t _ b o x " ) b r o w s e r . w a i t _ u n t i l { r e s u l t _ b o x . t e x t . l e n g t h > 0 } p u t s r e s u l t _ b o x . t e x t b r o w s e r . c l o s e
i r e ' s p e c _ h e l p e r ' d e s c r i b e " L e a d s " d o d e s c r i b e " A d d a l e a d w i t h s t a n d a r d f i e l d s " d o b e f o r e ( : a l l ) d o @ l e a d = b u i l d ( : l e a d ) o n ( D a s h b o a r d P a g e ) . g o _ t o _ l e a d s e n d i t " O p e n a n e w l e a d f o r m " d o o n ( L e a d s P a g e ) . o p e n _ n e w _ l e a d e n d i t " P o p u l a t e d a t a f o r n e w l e a d " d o o n ( N e w L e a d P a g e ) . p o p u l a t e _ p a g e _ w i t h ( @ l e a d ) o n ( N e w L e a d P a g e ) . s a v e e n d i t " C h e c k m o b i l e " d o e x p e c t ( o n ( L e a d P a g e ) . m o b i l e . t e x t ) . t o e q ( @ l e a d . m o b i l e ) e n d i t " C h e c k p h o n e " d o e x p e c t ( o n ( L e a d P a g e ) . p h o n e . t e x t ) . t o e q ( @ l e a d . p h o n e ) e n d i t " C h e c k e m a i l " d o e x p e c t ( o n ( L e a d P a g e ) . e m a i l . t e x t ) . t o e q ( @ l e a d . e m a i l ) e n d e n d e n d
h a s h i e ' m o d u l e M o d e l c l a s s L e a d < H a s h i e : : D a s h p r o p e r t y : f i r s t _ n a m e p r o p e r t y : l a s t _ n a m e p r o p e r t y : c o m p a n y _ n a m e p r o p e r t y : t i t l e p r o p e r t y : e m a i l p r o p e r t y : m o b i l e p r o p e r t y : p h o n e p r o p e r t y : s t r e e t p r o p e r t y : c i t y p r o p e r t y : r e g i o n p r o p e r t y : z i p p r o p e r t y : c o u n t r y p r o p e r t y : u s e r e n d e n d
r e l a t i v e ' . . / m o d e l s / l e a d ' F a c t o r y G i r l . d e f i n e d o f a c t o r y : l e a d , c l a s s : M o d e l : : L e a d d o f i r s t _ n a m e { F a k e r : : N a m e . f i r s t _ n a m e } l a s t _ n a m e { F a k e r : : N a m e . l a s t _ n a m e } c o m p a n y _ n a m e { F a k e r : : C o m p a n y . n a m e } t i t l e { F a k e r : : N a m e . t i t l e } e m a i l { F a k e r : : I n t e r n e t . e m a i l } m o b i l e { F a k e r : : P h o n e N u m b e r . c e l l _ p h o n e } p h o n e { F a k e r : : P h o n e N u m b e r . p h o n e _ n u m b e r } s t r e e t { F a k e r : : A d d r e s s . s t r e e t _ a d d r e s s } c i t y { F a k e r : : A d d r e s s . c i t y } r e g i o n { F a k e r : : A d d r e s s . s t a t e } z i p { F a k e r : : A d d r e s s . z i p } c o u n t r y ' U n i t e d S t a t e s ' e n d e n d
n a n e w l e a d f o r m " d o o n ( L e a d s P a g e ) . o p e n _ n e w _ l e a d e n d i t " P o p u l a t e d a t a f o r n e w l e a d " d o o n ( N e w L e a d P a g e ) . p o p u l a t e _ p a g e _ w i t h ( @ l e a d ) o n ( N e w L e a d P a g e ) . s a v e e n d
w L e a d P a g e < A b s t r a c t P a g e i n c l u d e P a g e O b j e c t p a g e _ u r l ( " h t t p s : / / a p p . f u t u r e s i m p l e . c o m / l e a d s / n e w " ) t e x t _ f i e l d ( : f i r s t _ n a m e , : i d = > " l e a d - f i r s t - n a m e " ) t e x t _ f i e l d ( : l a s t _ n a m e , : i d = > " l e a d - l a s t - n a m e " ) t e x t _ f i e l d ( : c o m p a n y _ n a m e , : i d = > " l e a d - c o m p a n y - n a m e " ) t e x t _ f i e l d ( : t i t l e , : i d = > " l e a d - t i t l e " ) t e x t _ f i e l d ( : e m a i l , : i d = > " l e a d - e m a i l " ) t e x t _ f i e l d ( : m o b i l e , : i d = > " l e a d - m o b i l e " ) t e x t _ f i e l d ( : p h o n e , : i d = > " l e a d - p h o n e " ) t e x t _ f i e l d ( : s t r e e t , : i d = > " l e a d - s t r e e t " ) t e x t _ f i e l d ( : c i t y , : i d = > " l e a d - c i t y " ) t e x t _ f i e l d ( : r e g i o n , : i d = > " l e a d - r e g i o n " ) t e x t _ f i e l d ( : z i p , : i d = > " l e a d - z i p " ) l i n k ( : s a v e , : c s s = > " . s a v e " ) e n d
r s t _ n a m e @ b r o w s e r . t e x t _ f i e l d ( : i d = > " l e a d - f i r s t - n a m e " ) . v a l u e e n d d e f f i r s t _ n a m e = ( f i r s t _ n a m e ) @ b r o w s e r . t e x t _ f i e l d ( : i d = > " l e a d - f i r s t - n a m e " ) . s e t ( f i r s t _ n a m e ) e n d d e f f i r s t _ n a m e _ e l e m e n t @ b r o w s e r . t e x t _ f i e l d ( : i d = > " l e a d - f i r s t - n a m e " ) e n d d e f f i r s t _ n a m e ? @ b r o w s e r . t e x t _ f i e l d ( : i d = > " l e a d - f i r s t - n a m e " ) . e x i s t s ? e n d
c k m o b i l e " d o e x p e c t ( o n ( L e a d P a g e ) . m o b i l e . t e x t ) . t o e q ( @ l e a d . m o b i l e ) e n d i t " C h e c k p h o n e " d o e x p e c t ( o n ( L e a d P a g e ) . p h o n e . t e x t ) . t o e q ( @ l e a d . p h o n e ) e n d i t " C h e c k e m a i l " d o e x p e c t ( o n ( L e a d P a g e ) . e m a i l . t e x t ) . t o e q ( @ l e a d . e m a i l ) e n d
d P a g e < A b s t r a c t P a g e i n c l u d e P a g e O b j e c t d i v ( : d e t a i l s , : i d = > " d e t a i l s " ) d e f m o b i l e l i s t _ i t e m _ w i t h _ l i n k _ a n d _ l a b e l ( " m o b i l e " ) e n d d e f p h o n e l i s t _ i t e m _ w i t h _ l i n k _ a n d _ l a b e l ( " w o r k " ) e n d d e f e m a i l l i s t _ i t e m _ w i t h _ l i n k _ a n d _ l a b e l ( " e m a i l " ) e n d p r i v a t e d e f l i s t _ i t e m _ w i t h _ l i n k _ a n d _ l a b e l ( l a b e l ) l i s t _ i t e m = d e t a i l s _ e l e m e n t . u n o r d e r e d _ l i s t _ e l e m e n t . l i s t _ i t e m _ e l e m e n t s . f i n d d o | i t e m | i t e m . l i n k _ e l e m e n t . e x i s t s ? & & i t e m . s p a n _ e l e m e n t ( : t e x t = > l a b e l ) . e x i s t s ? e n d l i s t _ i t e m . l i n k _ e l e m e n t e n d e n d
Reference Error r e q u i r e ' d e l e g a t e ' r e q u i r e ' p a g e - o b j e c t ' c l a s s E l e m e n t D e l e g a t o r < D e l e g a t o r d e f i n i t i a l i z e ( o b j ) s u p e r @ d e l e g a t e _ s d _ o b j = o b j e n d d e f m e t h o d _ m i s s i n g ( m , * a r g s , & b l o c k ) t r i e s = 0 b e g i n t r i e s + = 1 s u p e r r e s c u e S e l e n i u m : : W e b D r i v e r : : E r r o r : : S t a l e E l e m e n t R e f e r e n c e E r r o r t r i e s < 5 ? r e t r y : r a i s e e n d e n d d e f _ _ g e t o b j _ _ @ d e l e g a t e _ s d _ o b j e n d d e f _ _ s e t o b j _ _ ( o b j ) @ d e l e g a t e _ s d _ o b j = o b j e n d e n d
B a s e E l e m e n t E x t e n s i o n s d e f f i l l _ w i t h _ t e x t _ v i a _ j s ( t e x t , r e p e t i t i o n s = 1 ) s e l e c t o r = s e l f . e l e m e n t . i n s t a n c e _ v a r i a b l e _ g e t ( : @ d e l e g a t e _ s d _ o b j ) . i n s t a n c e _ v a r i a b l e _ g e r a i s e " O n l y : c s s s u p p o r t e d . " u n l e s s s e l e c t o r s c r i p t = % Q { v a r g e n e r a t e d T e x t = n e w A r r a y ( # { r e p e t i t i o n s } ) . j o i n ( ' # { t e x t } ' ) ; $ ( ' # { s e l e c t o r } ' ) . t e x t ( g e n e r a t e d T e x t ) ; $ ( ' # { s e l e c t o r } ' ) . f o c u s ( ) ; } C u r r e n t B r o w s e r . i n s t a n c e . e x e c u t e _ s c r i p t ( s c r i p t ) e n d e n d P a g e O b j e c t : : E l e m e n t s : : E l e m e n t . s e n d ( : i n c l u d e , B a s e E l e m e n t E x t e n s i o n s )