Igor,

I have a decent solution and could put together a wiki page, just need to know 
where/how..

here's what I've got.

Click and Wait for wicket:

        protected void clickAndWait(String wicketPath, long timeOut){
                String callbackScript = 
                                "if(!window.outstandingWicketCalls){" +
                                "  window.outstandingWicketCalls = 0;" +
                                "  var oldWicketGlobalPreCallHandler = 
window.wicketGlobalPreCallHandler;" +
                                "  var oldWicketGlobalPostCallHandler = 
window.wicketGlobalPostCallHandler;" +
                                "  window.wicketGlobalPreCallHandler = 
function() {" +
                                "       window.outstandingWicketCalls++; "+
                            "       oldWicketGlobalPreCallHandler();" +
                            "  };" +
                            " window.wicketGlobalPostCallHandler = function() 
{" +
                            "       oldWicketGlobalPostCallHandler();" +
                            "       window.outstandingWicketCalls--; "+
                            " };" +
                            "}" +
                            "window.write(window.outstandingWicketCalls);";

                selenium.runScript(callbackScript);
                click(wicketPath);
                
selenium.waitForCondition("selenium.browserbot.getCurrentWindow();window.outstandingWicketCalls===0",
 Duration.seconds(8).getMilliseconds() +"");
        }


Deal with unstable wicket paths

        protected String getDOMLocator(String xpathTagName, String wicketPath, 
int index){
                
                String regex = "_(\\d+|#)(_|$)";
                Pattern repeaterWicketPathPatter = Pattern.compile(regex);
                Matcher matcher = repeaterWicketPathPatter.matcher(wicketPath);

                while(matcher.find()){
                        try{
                                if(index == -1){
                                        index = 
Integer.parseInt(matcher.group(1));
                                }
                                
                                String xpathRegex = "_[0-9]+";
                                if("_".equals(matcher.group(2))){
                                        xpathRegex = xpathRegex + "_";
                                }
                                wicketPath = 
wicketPath.replace(matcher.group(), xpathRegex);
                        }catch(NumberFormatException nfe){
                                fail("index is required for getDOMLocator, 
please pass it to the method or as the first numeric value in the wicketpath 
provide i.e. foo_bar_134_child_#_child2_#");
                        }
                }
                
                StringWriter domLocator = new StringWriter();
                domLocator.append("dom=");
                
                if(index > 0){
                        domLocator.append("window.findElementByWicketPath('");
                        domLocator.append(wicketPath);
                        domLocator.append("', ");
                        domLocator.append(String.valueOf(index-1));
                        domLocator.append(");");
                }else {
                        domLocator.append("window.$('[wicketpath=\\'");
                        domLocator.append(wicketPath);
                        domLocator.append("\\']').get(0);");
                }
                return domLocator.toString();
        }


Douglas Ferguson

mobile: 512.293.7279
office/fax: 512.462.0408
skype: stillrecording
aim:   DaAmericanRuse

-

http://www.linkedin.com/in/douglasferguson
http://www.myspace.com/douglasferguson
http://www.douglasferguson.us/
http://www.distilleryrecords.com/
http://www.stillrecording.com/

Join my mailing list: [email protected]
________________________________________
From: Igor Vaynberg [[email protected]]
Sent: Tuesday, February 16, 2010 11:11 AM
To: [email protected]
Subject: Re: Selenium Testing - Ajax Loads

how would you do that exactly?

-igor

On Tue, Feb 16, 2010 at 7:26 AM, Douglas Ferguson
<[email protected]> wrote:
>
>> the path in repeaters is never stable, it depends on a lot of factors
>> and is hard to predict. i think what may be a good way to deal with it
>> is to use an IComponentInstantiationListener to add a behavior to Item
>> subclasses to output their index in some attribute. install this
>> listener only during test time or simply make it output nothing if not
>> during the test.
>>
>
> Interesting.... I'll look into it..
> Is there really any reason why not to just always have the listener there.
> Seems like there would be little overhead in doing this...
>
> But I am curious, if this can be done then why couldn't the wicket page also 
> be made stable using the same technique?
>
>>>>> 2) I have issues with timing which is typical, and most people call 
>>>>> "waitForPageToLoad" which works fine for normal http requests, but if It 
>>>>> is an ajax request I'm waiting for, then I have to implement a 
>>>>> waitForContition. Is there a wicket convention I could use here? i.e. how 
>>>>> can I know that a wicket ajax call has completed?
>>>>
>>>> there are global ajax callbacks that are invoked when an ajax request
>>>> completes. you can search this list for what they are. i imagine you
>>>> can write a bit of javascript to hook into those and implement
>>>> waitForCondition.
>>>
>>> I'm actually using the window.wicketGlobalPreCallHandler and 
>>> window.wicketGlobalPostCallHandler in my code already.
>>> Do you think it would be safe to use those? I.E. preHander sets a boolean 
>>> "isWaitingOnAjax" and postHander unsets it?
>>>
>>> Then I can do a waitForConition(!isWaitingOnAjax)
>>
>> yeah, that sounds like a good starting point.
>>
>> -igor
>>
>>>
>>>>
>>>> when you get all this working maybe you can create a wiki page about
>>>> it to help users who will have the same questions in the future.
>>>
>>> Sounds good...
>>>
>>>>
>>>> -igor
>>>>
>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> D/
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [email protected]
>>>>> For additional commands, e-mail: [email protected]
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to