From: Chen, M. <Min...@bm...> - 2009-07-31 20:33:51
|
So "Robot" mode is the recommended mode to use when we use abbot? Maybe I am wrong, but I checked the source code for abbot.tester.Robot.focus method, but it seems that we are using comp.requestFocus(); in both Robot and AWT mode? Thanks for clarifications. -min -----Original Message----- From: Timothy Wall [mailto:tw...@us...] Sent: Friday, July 31, 2009 6:43 AM To: Chen, Min Cc: abb...@li... Subject: Re: [abbot-users] Question regarding waitForIdle On Jul 29, 2009, at 8:13 PM, Chen, Min wrote: >> From abbot code, it seems that "-Dabbot.fixture.log_events=true" >> only work for the case where I use Costello or extend my testclass >> from ComponentTestFixture. In my case, it is more complicated, >> swing UI are mixed with SWT UI, so I am directly using abbot.jar to >> automate those swing controls. So how can I enable event queue >> logging in this scenario? > > Also, I have set my abbot.robot.mode=awt (not Robot), will this > matter at all? > > -min That *will* have an effect. AWT mode can not force focus changes, but only "request" them. If the OS for some reason can't or won't respond to a java request for focus, you're out of luck. AWT mode usually does a "Window.toFront()" on the component's window to get focus, but that may not work if the component is within an SWT hierarchy. In this case you'll probably almost certainly get different results with robot vs awt mode. > > -----Original Message----- > From: Timothy Wall [mailto:tw...@us...] > Sent: Wednesday, July 29, 2009 1:28 PM > To: Chen, Min > Cc: abb...@li... > Subject: Re: [abbot-users] Question regarding waitForIdle > > > 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. > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > abbot-users mailing list > abb...@li... > https://lists.sourceforge.net/lists/listinfo/abbot-users |