You can inject events into the GTK event queue—with GTK3—only for your application; you cannot test other processes. The main issue is that complex operations, like drag and drop, are made of long sequences of events and involve far too much machinery to effectively be automated.
Not really, no.
Some frameworks and applications may use the accessibility API to perform actions such as “click this button” or “put some text into an input field”; you can look at Dog Tail for a testing framework that does that.
Further I have got a GSource function frequently lock/unlock the test driver mutex. This is where the test runner may do its job. The source function needs to be attached to Gtk±3 main context, which can be retrieved by calling g_main_context_default().