转载时请注明出处和作者联系方式 作者联系方式:李先静 xianjimli at hotmail dot com GUI应用程序自动 测试 一直是个难题,通常的做法就是先把人工 测试过程 录制下来,然后去重放这个测试过程。这种方法的主要缺点是很" name="description" />
dfb_input_enumerate_devices ((InputDeviceCallback)device_callback,
&context->keyboard_device, DICAPS_KEYS);
dfb_input_enumerate_devices ((InputDeviceCallback)device_callback,
&context->mouse_device, DICAPS_AXES | DICAPS_BUTTONS);
dfb_input_attach (context->mouse_device,
input_device_listener, context, &context->mouse_reaction);
dfb_input_attach (context->keyboard_device,
input_device_listener, context, &context->keyboard_reaction);
static ReactionResult input_device_listener (const void *msg_data, void *ctx)
{
DFBContext *context = (DFBContext*)ctx;
DFBInputEvent *event = (DFBInputEvent*)msg_data;
event->locks = 0;
event->flags &= ~DIEF_LOCKS;
if (fwrite (msg_data, sizeof (DFBInputEvent), 1, context->file) != 1)
{
printf ("[%s]: fwrite Error errno = %d ", __func__, errno);
g_main_loop_quit (context->loop);
}
fflush(context->file);
return RS_OK;
}
static gboolean replay_one_event (gpointer user_data)
{
DFBContext *context = (DFBContext*)user_data;
off_t cur = 0;
DFBInputEvent event = context->event;
if(event.type == DIET_KEYPRESS || event.type == DIET_KEYRELEASE)
{
dfb_input_dispatch (context->keyboard_device, &event);
}
else
{
dfb_input_dispatch (context->mouse_device, &event);
}
if (fread (&context->event, sizeof (DFBInputEvent), 1, context->file) == 1)
{
guint ms = (context->event.timestamp.tv_sec - event.timestamp.tv_sec) * 1000
+ (context->event.timestamp.tv_usec - event.timestamp.tv_usec)/1000;
g_timeout_add (ms, replay_one_event, user_data);
}
else
{
g_main_loop_quit (context->loop);
}
return FALSE;
}