One thing you have to understand is that you're not calling javascript from your .net code. Your .net code runs and creates html to send to the browser, once all your .net code has run the browser gets the results and executes them and at that point you can run javascript. What RegisterStartupScript is doing is adding js to the output in a location that means it will execute when the page finally loads in the browser. The "Warning" parameter is the key. What you're doing is labelling your "abc('test')" as "Warning" and keys have to be unique so when you try and register that js for a second or third time then .net sees you've already added code with the key of "Warning" so it simply ignores your subsequent request to add.
So what you need to do is use a unique key each time you register the script. An easy way of doing this is to add the item index to the key;
this.Page.ClientScript.RegisterStartupScript(this.GetType(), string.Concat("Warning", e.Item.ItemIndex.ToString()), "abc('test')", true);
That will generate keys like "Warning0", "Warning1" etc.