The most portable solution is to minimze the GUI code. Think of the user interface as a set of interacting state machines: and code them as such. Implement tests of this control layer as simple (or not so simple) sequential scripts.
Once the control logic is properly encapsulated, the addition of the actual GUI interface is not a major issue: you can try a number of different ones. I generally recommend against the "common-denominator" approach, because it leads to GUIs that look equally bad on all platforms. --Dave.