1
Eclipseでアクティブなページ/エディタを見つけることができます。どのようにして、プログラムでeclipseで開いたモーダルダイアログのインスタンスを保持することができますか?プログラムで開いたEclipseのダイアログを見つける
Eclipseでアクティブなページ/エディタを見つけることができます。どのようにして、プログラムでeclipseで開いたモーダルダイアログのインスタンスを保持することができますか?プログラムで開いたEclipseのダイアログを見つける
現在のモデルダイアログにアクセスするためのEclipseに対応するインタフェースはありません。最適な近似はDisplay.getActiveShell()
です。アクティブなダイアログが存在する場合は、シェルを返します。
[ダイアログは、独自のイベントループを持つことによって実現されているので、あなた自身のコードを実行することがかなり難しいことができます...]
EDITは:下記のコメントに基づいて、ここに小さいです私は常に特定の設定ページの存在をテストするために使用します。私はこれがあなた自身のテストの出発点として使用されると思う... Display.timerExec(...)
の使用に注意してください。
public void test(String pageId) {
try {
final IWorkbench workbench = PlatformUI.getWorkbench();
final Shell[] shells = workbench.getDisplay().getShells();
final ICommandService cs = (ICommandService) workbench.getService(ICommandService.class);
final ParameterizedCommand command = cs.deserialize("org.eclipse.ui.window.preferences(preferencePageId="
+ pageId + ")");
assertNotNull(command);
final IHandlerService hs = (IHandlerService) workbench.getService(IHandlerService.class);
// Have to use timerExec to get the runnable executed after the dialog is shown
workbench.getDisplay().timerExec(2000, new Runnable() {
@Override
public void run() {
assertEquals(shells.length + 1, workbench.getDisplay().getShells().length);
final Shell lastShell = findLastShell(workbench.getDisplay().getShells(), shells);
assertNotNull(lastShell);
final Object data = lastShell.getData();
assertNotNull(data);
assertTrue(data instanceof PreferenceDialog);
lastShell.close();
assertEquals(shells.length, workbench.getDisplay().getShells().length);
}
private Shell findLastShell(Shell[] currentShells, Shell[] oldShells) {
CheckNext: for (final Shell cs : currentShells) {
for (final Shell os : oldShells) {
if (os == cs) {
continue CheckNext;
}
}
return cs;
}
return null;
}
});
hs.executeCommand(command, null);
} catch (final Exception ex) {
fail(ex.getMessage());
}
}
私はこれを試していましたが、シェルを持っているのは本当に目的を果たしていません。アクティブなエディタを使用すると、入力にアクセスする、プログラムで保存するなどの負荷をかけることができます。しかしシェルだけでは、プログラム的にok/cancelボタンを試すことさえできません。 – codejammer
ダイアログではどうしたいですか? –
私はこれを自動化テストの一部として必要としています。私は非常に簡単な操作をトリガする必要があります(OKをクリックしてキャンセルします) – codejammer