From: Timothy W. <tw...@us...> - 2009-07-29 20:28:53
|
On Jul 29, 2009, at 3:07 PM, Chen, Min wrote: > Hi there, > > I have been using abbot to automate our Swing > application, but we recently ran into some random failures in > automating a wizard due to some timing issues, making me wonder why > waitForIdle is not reliable enough to make sure current action is > completed before going to next one. Here is my test scenario: > 1. Wait for a wizard to come up. > 2. In step 1, select a radio button. (use > JButtonTester.actionClick) > 3. Click Next (use > JButtonTester.actionClick) > 4. In step 2, type in a value in a JTextField. (use > JTextComponentTester.actionEnterText) > > Most times the code above works fine on my machine, but it fails > randomly at different steps on my colleagues’ machine, normally two > failure cases: > 1. In #2, radio button is not selected, and next button is > clicked. > 2. In #4, the first character of the value supposed to be > typed in the text field disappears, feel like that > JTextComponentTester.actionEnterText is executed when the wizard > page is completely ready. > When this happens, adding some delay after wizard showing up may > help, but this will not be an ideal approach, since we don’t know > exactly how long we have to delay. > I have checked the code of JButtonTester.actionClick, which has a > waitForIdle() at the end. Does it mean that we should wait for the > button click event complete to go to next? Why is it not working > consistently? Is there any parameters I can tweak to make it behave > more consistently? Thanks. If a GUI action results in any background operations which update the UI at some later point, you must explicitly wait for whatever trigger is available which indicates the end of that operation. waitForIdle() puts an event on the AWT queue after posting the action's native event, and waits for it to be processed, which usually indicates that the robot event has been posted and processed on the AWT queue. You might try adjusting abbot.robot.event_post_delay (default 100ms) or other properties listed in doc/properties.txt. #1: try to determine why abbot thinks it clicked on the radio button but the radio button did not respond. was its event handler set up in time? was it enabled? #2: on enter text actions, Abbot ensures the component has focus before sending text events. enable logging of the event queue to see if the AWT events are reaching the text component, or if they're being sent somewhere else (or if they're missing entirely). enable event queue logging with -Dabbot.fixture.log_events=true. |