cancel
Showing results for 
Search instead for 
Did you mean: 

TypeError: Cannot read property 'push' of null .. well, sometimes

SOLVED
elesniewski
Occasional Contributor

TypeError: Cannot read property 'push' of null .. well, sometimes

I have a scenario where I setup a variable of Type Object with Default value: {Object variable [unassigned]}

This will be populated with an array of sql query output.  On first run of the test, the following code fails with TypeError: Cannot read property 'push' of null.  The line with error is where this variable is to be populated: KeywordTests.Main.Variables.ourArray.push(RecSet.Fields.Item("ClaimID").Value);

 

On the 2nd run of this test, I get no errors and the script completes with appropriate log messages.  I don't understand why this test will fail the 1st time it is run, but not on consecutive run of the code.  Any thoughts are appreciated. Thanks.

 

// Step 9: 
// This involves running verus_CheckSubrogationClaim, 
// verus_UpdateSubrogationStatusByClaimID @ClaimID = ..., 
// verus_UpdateSubrogationNoticeInfo @ClientID = ...

function ExecSubrogationCheck()
{
  KeywordTests.Main.Variables.getID.Reset();

  //KeywordTests.Main.Variables.ourArray = []; <-- Whenever I try this, I get a value that is read as not null !?

  var AConnection, RecSet, Cmd, cmdTxt;
  var clnt = KeywordTests.Main.Variables.getID.Value("ClientID");
  var userID = KeywordTests.Main.Variables.getID.Value("Login");
  var pWord = KeywordTests.Main.Variables.getID.Value("Password");
  // Create a new Connection object
  AConnection = ADO.CreateConnection();
  // Note that you can also create an ADO connection using the following code:
  // AConnection = getActiveXObject("ADODB.Connection");

  // Specify the connection string
  AConnection.ConnectionString = "Provider=SQLOLEDB;Server=<redacted>;Database=CMS;Uid=" + userID + ";Pwd=" + pWord;
  // Activate the connection
  AConnection.Open();
  // Create a new Coomnad object
  Cmd = ADO.CreateCommand();
  // To create an ADO command you can also use the following code:
  // Cmd = getActiveXObject("ADODB.Command");
  // Specify the connection
  Cmd.ActiveConnection = AConnection;
  // Specify command type and text
  Cmd.CommandType = adCmdText;
  // EXEC 1st part of subrogation check
  cmdTxt = 'EXEC verus_CheckSubrogationClaim';
  Log.Message(cmdTxt);
  Cmd.CommandText = cmdTxt;
  // Execute the command
  Cmd.CommandTimeout = 0;
  RecSet = Cmd.Execute();

  // Process the table records
  if (! RecSet.EOF){
  RecSet.MoveFirst();
  // Grab ClaimIDs put into variable ourArray
  while (! RecSet.EOF)
  {
    if (RecSet.Fields.Item("ClaimID").Value != null){
    KeywordTests.Main.Variables.ourArray.push(RecSet.Fields.Item("ClaimID").Value);
    }
    RecSet.MoveNext();
    
  } 
  RecSet.Close();
  } else {
    Log.Warning("No Subrogation Claims found!");
  }
  
  // change ourArray into an actual array
  var s = KeywordTests.Main.Variables.ourArray;
  //var s = [5523598,5523599,5523600]; -- this is here for testing purposes
  var prevSep = aqString.ListSeparator; 
    aqString.ListSeparator = ",";
  if (KeywordTests.Main.Variables.ourArray != null){
  Log.Message(aqString.GetListLength(s) + " Subrogation Claims found.");
  Log.Message("EXEC verus_UpdateSubrogationStatusByClaimID @ClaimID = ...")
    //This reads through the array and EXEC verus_UpdateSubrogationStatusByClaimID @ClaimID = for each claim
  for (let i = 0; i < aqString.GetListLength(s); i++) {
    // Create a new Coomnad object
    Cmd = ADO.CreateCommand();
    // Specify the connection
    Cmd.ActiveConnection = AConnection;
    // Specify command type and text
    Cmd.CommandType = adCmdText;
    // EXEC 2nd part of subrogation check
    cmdTxt = 'EXEC verus_UpdateSubrogationStatusByClaimID @ClaimID = ' + aqString.GetListItem(s,i);
    //Log.Message(cmdTxt);
    Cmd.CommandText = cmdTxt;
    // Execute the command
    Cmd.CommandTimeout = 0;
    RecSet = Cmd.Execute();
      
  }
  aqString.ListSeparator = prevSep;
  //RecSet.Close(); -- this gave an error and was commented out
  
  Log.Checkpoint("Subrogation Claims status Updated");
  }
// EXEC 3rd part of subrogationcheck verus_UpdateSubrogationNoticeInfo @ClientID = 
// Create a new Coommand object
  Cmd = ADO.CreateCommand();
  // To create an ADO command you can also use the following code:
  // Cmd = getActiveXObject("ADODB.Command");
  // Specify the connection
  Cmd.ActiveConnection = AConnection;
  // Specify command type and text
  Cmd.CommandType = adCmdText;
  // EXEC 3rd part of subrogation check
  if (KeywordTests.Main.Variables.ourArray != null){
  cmdTxt = 'EXEC verus_UpdateSubrogationNoticeInfo @ClientID = 2, @LawFirmID = ' + KeywordTests.Main.Variables.getID.Value("LawFirmID") + ', @SubId = 0, @SubNoticeID = 0';
  //Log.Message(cmdTxt);
  Cmd.CommandText = cmdTxt;
  // Execute the command
  Cmd.CommandTimeout = 0;
  RecSet = Cmd.Execute();
  } 
//Close connections
  AConnection.Close();
  
  Log.Checkpoint("Subrogation Check for <redacted> Claims completed.");
  
}
1 ACCEPTED SOLUTION

Accepted Solutions
elesniewski
Occasional Contributor

Re: TypeError: Cannot read property 'push' of null .. well, sometimes

That works, too, but, to solve this issue I found I needed to change the following:

 

if (KeywordTests.Main.Variables.ourArray != null)

change to:
if (KeywordTests.Main.Variables.ourArray != '')

 If I use null here, an empty string is passed to the sql query, causing the syntax error.  If I use '' instead of null, no worries.   Thanks.

View solution in original post

5 REPLIES 5
Ruybal357
Occasional Visitor

Re: TypeError: Cannot read property 'push' of null .. well, sometimes

Hey...  I want a small help from everyone here... please tell me how to make cannot read property 'push' of null??? Just give me a better solution for this Mobdro

shankar_r
Community Hero

Re: TypeError: Cannot read property 'push' of null .. well, sometimes

You have to uncomment this line because this variable has to be initialized.

Have you tried with uncommenting below line in your code?

//KeywordTests.Main.Variables.ourArray = []; <-- Whenever I try this, I get a value that is read as not null !?

 

 


Thanks
Shankar R

LinkedIn | CG-VAK Software | Bitbucket | shankarr.75@gmail.com

“You must expect great things from you, before you can do them”

Extension Available

elesniewski
Occasional Contributor

Re: TypeError: Cannot read property 'push' of null .. well, sometimes

I have tried running the test with that variable initialized, uncommented that line, but I receive a syntax error. The initialization of that variable is read as something other than null, which causes bad data to be sent to the sql query in the next section. This causes a syntax error.

tristaanogre
Community Hero

Re: TypeError: Cannot read property 'push' of null .. well, sometimes

Keywordtest variables do not play well with native array objects.  Rather than assigning that array to a keyword test variable, make it a local variable to the function, unless there is some need to have that array available in the keyword test.


Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available
elesniewski
Occasional Contributor

Re: TypeError: Cannot read property 'push' of null .. well, sometimes

That works, too, but, to solve this issue I found I needed to change the following:

 

if (KeywordTests.Main.Variables.ourArray != null)

change to:
if (KeywordTests.Main.Variables.ourArray != '')

 If I use null here, an empty string is passed to the sql query, causing the syntax error.  If I use '' instead of null, no worries.   Thanks.

View solution in original post

New Here?
Join us and watch the welcome video:
Announcements