Compatibility with Pyface test utilities¶
UITester is intended to be compatible with Pyface’s
(for testing with modal dialogs) and
GuiTestAssistant (for general
GUI event loop handling in tests).
Testing with modal dialogs¶
When a test involves a modal dialog,
ModalDialogTester will be needed.
UITester can be used together, for example, to launch the modal dialog
which then gets closed by
from pyface.constant import OK from pyface.toolkit import toolkit_object from traitsui.testing.api import MouseClick, UITester ModalDialogTester = toolkit_object( "util.modal_dialog_tester:ModalDialogTester" ) tester = UITester() with tester.create_ui(demo) as ui: simple_button = tester.find_by_id(ui, "simple") def click_simple_button(): simple_button.perform(MouseClick()) modal_tester = ModalDialogTester(click_simple_button) modal_tester.open_and_run(lambda x: x.click_button(OK)) assert modal_tester.dialog_was_opened
But if you try to modify or inspect GUI states using
UITester while the
dialog is opened, you should set the
attribute to false for those operations. Otherwise the ModalDialogTester and
UITester will enter a deadlock that blocks forever.
def when_opened(modal_dialog_tester): ui_tester = UITester(auto_process_events=False) ui_tester.find_by_id(ui, "button").perform(MouseClick()) modal_dialog_tester = ModalDialogTester(callable_to_open_dialog) modal_dialog_tester.open_and_run(when_opened)
Using UITester and GuiTestAssistant¶
GuiTestAssistant is a more general tool dealing with GUI processing in tests.
UITester, on the other hand, is a more specific tool for testing GUI
components managed by TraitsUI. The two can be used together in tests.
GuiTestAssistant has been around before
UITester is introduced.
Since various methods on
UIWrapper (such as
inspect()) automatically request GUI events to be processed, where
they are used entirely for modifying and inspecting GUI states, some previous
GuiTestAssistant features may no longer be necessary.