I was scripting up something this week and found that the normal ‘wait for element present’ tricks that would normally be applied to a dynamic page (where ‘latching’) were not working. Turns out the reason for this was that the page content was being updated before a critical bit of session information was updated. And since this script was for a load test, the timing of the delay was unpredictable so the brute-force ‘sleep’/’pause’ would have been too inefficient.
What did work is what I’ll call a ‘ladder’ wait. I have no idea if it has another name, but I’m calling it a ladder.
var ladder = 1000; var success = false; while (success != true) { // do stuff that could be successful // wait for some period of time, determined by the ladder selenium.pause(ladder); // check for the absence of the failure mode if (! selenium.isTextPresent("Affiliated Organization is required")) { success = true; } else { ladder = ladder + 1000; } } |
The ‘magic’ of the ladder is that the wait time starts at some nice, acceptable value and then increases each time a failure occurs. Eventually the pause gets to the point where the state and script are synch and we move on.
A further refinement that could be done is to put an upper limit on the ladder so the script fails when the ladder hits the ceiling (ha!).
Post a Comment