preload

Web Table operations 2 (WinRunner, TSL)

Posted by Albert Gareev on Oct 21, 2007 | Categories: Source codeWeb

Service Functions – Windows Web GUI / WinRunner

Loop through web page in order to find matching table

# Attention! This is the low-level function which is supposed to be called in the loop
# Set the proper window
public function wb_ht_find_table(in key_cell, in key_row, in key_column, out table_desc, in regex_flag, in exp_location, in loc_start, in loc_end) {
# mandatory parameters
# in key_cell, in key_row, in key_column
# optional parameters
# in regex_flag, in find_first, in exp_location, in loc_start, in loc_end
 auto rc;
 auto location;
 
 if (loc_start == "") loc_start = 0;
 if (loc_end == "") loc_end = _wb_location_max;

 if (exp_location == "") exp_location = loc_start;
 if (exp_location < loc_start) exp_location = loc_start;
 if (exp_location > loc_end) exp_location = loc_end;

# Check expected location
 rc = wb_ht_tbl_cell_exists(exp_location, key_cell, key_row, key_column, table_desc, regex_flag);
 if (rc == E_OK) return(E_OK);
 
# Scan loop
 location = loc_start-1;
 while (1) {
  location++;

# Search range exceeded, exit
  if (location > loc_end) return(E_NOT_FOUND);
# Search range exceeded, exit
  if (location > _wb_location_max) return(E_NOT_FOUND);
  
#   Search
  rc = wb_ht_tbl_cell_exists(location, key_cell, key_row, key_column, table_desc, regex_flag);

# FAIL exit (no more tables)
  if (rc == E_NOT_FOUND)
   return(rc);
# FAIL exit (failed reading table)
  if (rc == E_GENERAL_ERROR) return(rc);
# PASS exit (table found)
  if (rc == E_OK) return(rc);
  
# Table found, cell not exists - continue search
  if (rc == E_ITEM_NOT_FOUND) continue;

# Unknown state - exit
  break;
  }
  
 return(E_GENERAL_ERROR);  
}

Load web table data into matrix

# Attention! This is the low-level function. Set the proper window
public function wb_ht_load_table(in table, inout mxTable[]) {
 auto rc, i, j, value, actual_text_length;
 auto col_count, row_count;
 
# clean up data matrix
 delete mxTable[];

 rc = obj_exists(table);
 if (rc != E_OK) return(E_GENERAL_ERROR);
 
# Get the boundaries
 rc = tbl_get_cols_count(table, col_count);
 if (rc != E_OK) return(E_GENERAL_ERROR);
 rc = tbl_get_rows_count(table, row_count);
 if (rc != E_OK) return(E_GENERAL_ERROR);
 for (i=1;i<=row_count;i++) {
  for (j=1;j<=col_count;j++) {
   
  # Note: this block is the workaround for non-rectangular tables 
   rc = web_obj_get_text(table, "#" & i, "#" & j, value);
   if (rc != E_OK) {
    mxTable[i,j] = "";
    continue; 
    } 

  # Get text if cell exists  
   rc = web_tbl_get_cell_data(table, "#" & i, "#" & j, 0, value, actual_text_length);  
   if (rc != E_OK) return(E_GENERAL_ERROR);
  
   mxTable[i,j] = str_trim(value);
   }
  }
  
 mxTable[0, "sys", "colCount"] = col_count;   
 mxTable[0, "sys", "rowCount"] = row_count;   
  
 return(E_OK); 
}

Load a range of web table data into matrix

public function wb_ht_load_table_range(in table, in start_row, in end_row, inout mxTable[]) {
 auto rc, i, j, value, actual_text_length;
 auto col_count, row_count, row_index;
 
# clean up data matrix
 delete mxTable[];

 rc = obj_exists(table);
 if (rc != E_OK) return(E_GENERAL_ERROR);

# Get the boundaries
 rc = tbl_get_cols_count(table, col_count);
 if (rc != E_OK) return(E_GENERAL_ERROR);
 rc = tbl_get_rows_count(table, row_count);
 if (rc != E_OK) return(E_GENERAL_ERROR);

 if (start_row > row_count) start_row = row_count;
 if (end_row < start_row) end_row = start_row;
 if (end_row > row_count) end_row = row_count;

 row_index = 0;
 for (i=start_row;i<=end_row;i++) {
  row_index++;
  for (j=1;j<=col_count;j++) {
   
  # Note: this block is the workaround for non-rectangular tables 
   rc = web_obj_get_text(table, "#" & i, "#" & j, value);
   if (rc != E_OK) {
    mxTable[row_index,j] = "";
    continue; 
    } 

  # Get text if cell exists  
   rc = web_tbl_get_cell_data(table, "#" & i, "#" & j, 0, value, actual_text_length);  
   if (rc != E_OK) return(E_GENERAL_ERROR);
  
   mxTable[row_index,j] = str_trim(value);
   }
  wg_anti_sleep(); 
  }
  
 mxTable[0, "sys", "colCount"] = col_count;   
 mxTable[0, "sys", "rowCount"] = row_index;   
  
 return(E_OK); 
}


Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported
This work by Albert Gareev is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.