High-level Web Testing
Upcoming SlideShare
Loading in...5
×
 

High-level Web Testing

on

  • 4,714 views

 

Statistics

Views

Total Views
4,714
Views on SlideShare
4,711
Embed Views
3

Actions

Likes
2
Downloads
2
Comments
0

1 Embed 3

http://coderwall.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

High-level Web Testing High-level Web Testing Presentation Transcript

  • High-level web testing Peter Sergeant Contractor @ NET-A-PORTER
  •  
  •  
    • # $mech is a WWW::Mechanize subclass object
    • $mech ->get( '/Fulfilment/Putaway?process_group=844284' );
    • print Dumper $mech ->as_data();
    • # Page contents as data
    • $VAR1 = {
    • 'metadata' => {
    • 'delivery_number' => '615019' ,
    • 'process_group_id' => '844284' ,
    • 'page_type' => 'Surplus' ,
    • 'Designer' => 'Rows' ,
    • 'Description' => 'New Description' ,
    • 'Colour' => 'Black' ,
    • 'Sales Channel' => 'MRPORTER.COM'
    • },
    • 'item_list' => [
    • {
    • 'Size' => 'None/Unknown' ,
    • 'SKU' => '2106034-001'
    • },
    • {
    • 'Size' => 'None/Unknown' ,
    • 'SKU' => '2106034-005'
    • }
    • ]
    • };
    • 'Fulfilment/PackingException/ViewContainer' => {
    • auto_match => qr!^/Fulfilment/PackingException/ViewContainer?container_id=Mw+ $! ,
    • specification => {
    • orphaned_items => {
    • location => 'id("orphaned_items")' ,
    • transform => 'parse_table' ,
    • optional => 1 ,
    • },
    • shipment_items => {
    • location => 'id("shipment_items")' ,
    • transform => 'parse_table' ,
    • optional => 1 ,
    • },
    • cancelled_items => {
    • location => 'id("cancelled_items")' ,
    • transform => 'parse_table' ,
    • optional => 1 ,
    • },
    • }
    • },
    • 'Fulfilment/Packing/EmptyTote' => {
    • auto_match => qr!^/Fulfilment/Packing/EmptyTote!,
    • specification => {
    • totes => {
    • location => 'id("totes")' ,
    • transform => 'parse_simple_list' ,
    • },
    • },
    • },
    • =head2 parse_simple_list
    • Return a simplified text representation of the li elements under a node.
    • =cut
    • sub _xclient_parse_simple_list {
    • my ( $self , $list_node ) = @_ ;
    • # Find the child elements
    • my @li_elements = $list_node ->find_xpath( 'li' )->get_nodelist();
    • # Render them as text
    • my @simplified = map {
    • $self ->_xclient_trim_cell( $_ ->as_text)
    • } @li_elements ;
    • # And give them back...
    • return @simplified ;
    • }
    • # Send the shipment ID
    • $mech ->submit_form_ok({
    • with_fields => { shipment_nr = $shipment_id }
    • }, "Shipment ID submitted" );
    • # Check we're in the right place, and then submit the form
    • unless ( $mech ->uri->path eq '/Fulfilment/Selection' ) {
    • die "Expecting to be on /Fulfilment/Selection, actually: " .
    • $mech ->uri->path
    • }
    • # Send the shipment ID
    • $mech ->submit_form_ok({
    • with_fields => { shipment_nr = $shipment_id }
    • }, "Shipment ID submitted" );
    • # Check we're in the right place, and then submit the form
    • unless ( $mech ->uri->path eq '/Fulfilment/Selection' ) {
    • die "Expecting to be on /Fulfilment/Selection, actually: " .
    • $mech ->uri->path
    • }
    • # Send the shipment ID
    • $mech ->submit_form_ok({
    • with_fields => { shipment_nr = $shipment_id }
    • }, "Shipment ID submitted" );
    • # Check we didn't get any logical errors
    • if ( $mech ->as_data->error_message ) {
    • die "HTTP request passed, but the application complained: " .
    • $mech ->as_data->error_message;
    • }
    • __PACKAGE__->create_fetch_method(
    • method_name => 'flow_mech__fulfilment__packingexception' ,
    • page_description => 'packing Exception Page' ,
    • page_url => '/Fulfilment/PackingException'
    • );
    • __PACKAGE__->create_form_method(
    • method_name => 'flow_mech__fulfilment__packingexception_comment' ,
    • form_name => 'add_comments' ,
    • form_description => 'add comment' ,
    • assert_location => qr!^/Fulfilment/Packing/CheckShipmentException!,
    • transform_fields => sub { return { note_text => $_ [ 1 ] } },
    • );
    • #-------------------------------------------------------------------------------
    • $framework
    • ->flow_mech__fulfilment__packingexception
    • ->flow_mech__fulfilment__packingexception_comment(
    • "The quick brown fox ran over the lazy sheep dog"
    • );
    • #-------------------------------------------------------------------------------
    • # ->flow_mech__fulfilment__packingexception()
    • # Retrieving the packing Exception Page
    • # URL /Fulfilment/PackingException retrieved successfully via HTTP
    • # No status message shown
    • # Retrieved the packing Exception Page
    • # ->flow_mech__fulfilment__packingexception_comment( "Comment 1:70236" )
    • # URL [/Fulfilment/Packing/CheckShipmentException] matched assertion
    • # Searching for the add comment form
    • # Submitting add comment form
    • # URL /Fulfilment/Packing/CheckShipmentException?shipment_id=1630767 retrieved successfully via HTTP
    • # No status message shown
    • # Look for our purchase order
    • $flow
    • ->flow_mech__goodsin__stockin
    • ->flow_mech__goodsin__stockin_search({
    • purchase_order_number => $purchase_order_id
    • });
    • # Did we find it?
    • is(
    • $flow ->mech->as_data->{ 'products' }->[ 0 ]->{ 'PID' },
    • $product_id ,
    • "Found our product from the purchase order search"
    • );
    • # Check the packing slip
    • $flow
    • ->flow_mech__goodsin__stockin_packingslip( $flow ->stock_order->id )
    • # Is it sensible?
    • is(
    • $flow ->mech->as_data->{ 'product_data' }->{ 'Purchase Order' }->{ 'value' },
    • $purchase_order ->purchase_order_number,
    • "Purchase order matched from Stock Order page"
    • );
    • sub create_form_method {
    • my ( $class , %args ) = @_ ;
    • # This is a good place to check a user is using it correctly...
    • $class ->_auto_methods_check_params( %args ,
    • {
    • required => [ qw/
    • method_name form_name form_description assert_location
    • / ],
    • optional => [ 'form_button' , 'transform_fields' ],
    • });
    • $class ->meta->add_method(
    • $args { 'method_name' } => sub {
    • my ( $self , @user_options ) = @_ ;
    • $self ->show_method_name( $args { 'method_name' }, @user_options );
    • $self ->assert_location( $args { 'assert_location' } )
    • if defined $args { 'assert_location' };
    • my $transformed_fields = $args { 'transform_fields' } ?
    • $args { 'transform_fields' }->( $self , @user_options ) : {};
    • $self ->indent_note( "Searching for the $args {'form_description'} form" );
    • my $name = ref ( $args { 'form_name' }) eq 'CODE' ?
    • $args { 'form_name' }->( $self , @user_options ) :
    • $args { 'form_name' };
    • my $form = $self ->mech->form_name( $name );
    • unless ( $form ) {
    • croak "Couldn't find a form with name $args {'form_name'}" ;
    • }
    • $self ->mech->set_fields( %$transformed_fields );
    • my $button = ref ( $args { 'form_button' }) eq 'CODE' ?
    • $args { 'form_button' }->( $self , @user_options ) :
    • $args { 'form_button' };
    • $self ->indent_note( "Submitting $args {'form_description'} form" );
    • $self ->mech->submit_form(
    • fields => $transformed_fields ,
    • $button ? ( button => $button ) : ()
    • );
    • $self ->note_status;
    • return $self ;
    • }
    • );
    • }
  • Come and work at Net-A-Porter
    • We’re hiring
    • It’s a lot of fun
    • Nice offices