在SWTBot中,触发右键菜单是简单的task,但是当要触发contextMenu的二级菜单时,就会出现问题,原因可能是事件的丢失,诸如下面的菜单:
Tree
TreeItem1
TreeItem2
想要在TreeItem2上触发SOMA->SOMA sub menu是困难的,下面是我的解决方案(从SWTBot 论坛上抄出来的呵呵http://www.eclipse.org/forums/index.php?t=msg&goto=629948&S=96549f36b839765eb99c047d8b51151c)
经验是,不能直接传入TreeItem, 要把整个Tree node传入才行
String[] paths={"SOMA-ME","Extract SOMA Service Model Elements"};
ContextMenuHelper.clickContextMenu(projectTree,paths);
ContextMenuHelper 源代码:
package com.ibm.asset.adit.mdhi.test.util;
import static
org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.withMnemonic;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.instanceOf;
import java.util.Arrays;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.swtbot.swt.finder.results.WidgetResult;
import org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot;
import org.hamcrest.Matcher;
public class ContextMenuHelper {
/**
* Clicks the context menu matching the text.
*
* @param text
* the text on the context menu.
* @throws WidgetNotFoundException
* if the widget is not found.
*/
public static void clickContextMenu(final AbstractSWTBot<?> bot,
final String... texts) {
// show
final MenuItem menuItem = UIThreadRunnable
.syncExec(new WidgetResult<MenuItem>() {
public MenuItem run() {
MenuItem menuItem = null;
Control control = (Control) bot.widget;
Menu menu = control.getMenu();
for (String text : texts) {
Matcher<?> matcher = allOf(
instanceOf(MenuItem.class),
withMnemonic(text));
menuItem = show(menu, matcher);
if (menuItem != null) {
menu = menuItem.getMenu();
} else {
hide(menu);
break;
}
}
return menuItem;
}
});
if (menuItem == null) {
throw new WidgetNotFoundException("Could not find menu: "
+ Arrays.asList(texts));
}
// click
click(menuItem);
// hide
UIThreadRunnable.syncExec(new VoidResult() {
public void run() {
hide(menuItem.getParent());
}
});
}
private static MenuItem show(final Menu menu, final Matcher<?> matcher) {
if (menu != null) {
menu.notifyListeners(SWT.Show, new Event());
MenuItem[] items = menu.getItems();
for (final MenuItem menuItem : items) {
if (matcher.matches(menuItem)) {
return menuItem;
}
}
menu.notifyListeners(SWT.Hide, new Event());
}
return null;
}
private static void click(final MenuItem menuItem) {
final Event event = new Event();
event.time = (int) System.currentTimeMillis();
event.widget = menuItem;
event.display = menuItem.getDisplay();
event.type = SWT.Selection;
UIThreadRunnable.asyncExec(menuItem.getDisplay(), new VoidResult() {
public void run() {
menuItem.notifyListeners(SWT.Selection, event);
}
});
}
private static void hide(final Menu menu) {
menu.notifyListeners(SWT.Hide, new Event());
if (menu.getParentMenu() != null) {
hide(menu.getParentMenu());
}
}
}
分享到:
相关推荐
在"swtbotw例子"中,我们可以深入理解SWTBot的用法和功能。 首先,SWTBot提供了一种简洁的API,用于选择和操作UI元素,如按钮、文本框、菜单项等。例如,你可以使用`Bot.button()`或`Bot.menuItem()`来定位并触发...
首先,在Eclipse中打开`Help` -> `Install New Software`,然后添加SWTBot的更新站点地址,选择要安装的版本,按照向导提示完成安装。 ### 示例详解 一个简单的SWTBot测试示例可能如下: ```java import org....
使用SWTBot,你可以编写测试脚本来模拟用户在Eclipse RCP应用中的各种操作。例如,你可以创建一个测试来打开特定的视图,点击某个按钮,检查结果是否符合预期。SWTBot提供了如`Bot.button()`、`Bot.menu()`和`Bot....
在学习SWTBot的过程中,首先需要理解SWT和RCP的概念。SWT是Eclipse项目开发的一种轻量级的图形用户界面库,它允许开发者构建与操作系统原生UI紧密集成的Java应用程序。RCP则是Eclipse平台提供的一种框架,用于快速...
在SWTBot中,你可以使用查找机制来定位GUI元素。这可以通过Widget的属性,如标签、ID或位置来实现。例如,`bot.button("OK")` 将找到并返回一个标签为"OK"的按钮对象,然后可以调用其方法执行点击操作。 接下来,...
1. **安装与配置**:首先,开发者需要在Eclipse环境中安装SWTBot插件,这可以通过Eclipse的内置更新站点或下载离线包完成。安装后,需要导入相关的库到项目中,以便在测试代码中引用。 2. **基本组件操作**:SWTBot...
在提供的文件中,“SWTBot工作机制.txt”应该详细介绍了SWTBot的内部工作流程和设计思想;“swtbot编译.txt”可能包含了如何编译和设置SWTBot的环境;而“bat制作1.txt”和“bat制作.txt”可能是关于如何创建批处理...
SWTBOT的核心优势在于其能够准确识别和操作界面元素,即使这些元素在不同的运行环境中可能有所变化。 #### SWTBOT的关键特点 - **易于学习与使用**:对于熟悉Eclipse RCP的开发者来说,SWTBOT的API相对直观易懂。 -...
swtbot eclipse插件 测试界面
#### 五、sbtwot工具在Web测试中的应用 sbtwot(应为swtbot)是一种开源的Java GUI测试工具,它专注于测试Swing和SWT/SWT JFace UI组件。尽管swtbot最初是为了测试桌面应用程序而设计的,但它也可以用于Web页面测试...
SWTBot是用于SWT / RCP应用程序的自动化和测试工具,具有记录和回放脚本的功能。 功能将包括基于文本的脚本,对测试套件的回放,报告和多线程回放的ant支持。
2. **基本概念**:了解SWTBOT的核心类,如`SWTBot`、`BotFactory`和`WidgetFinder`,以及它们在测试中的作用。 3. **选择和操作控件**:学习如何通过SWTBOT选取和操作窗口、菜单、按钮、文本框等GUI元素。 4. **...
方案示例-swtbot-e4 结合使用场景和SWTBot来测试和记录Eclipse RCP e4示例应用程序的示例UI测试和Scenarioo集成可在plugins/org.scenarioo.example.e4.test/src/org/scenarioo/example/e4文件夹中找到。构建并运行...
NULL 博文链接:https://mwhgjava.iteye.com/blog/2257771
SWTBot提供了丰富的API,可以模拟用户的操作,如点击按钮、填写表单、选择菜单项等,从而实现对GUI应用的自动化测试。 【Pentaho数据集成(PDI)】PDI,也称为Kettle,是Apache 2.0许可下的一款开源ETL(Extract, ...
4. 在Eclipse中配置JUnit运行配置,指定SWTBot测试运行器。 5. 运行测试并根据结果迭代改进代码。 通过遵循这些步骤,开发者可以有效地对Eclipse JFace UI应用程序进行单元测试,确保代码的质量和稳定性。
3. **初始化Bot**:在测试类中,通常会在`setUp`方法中初始化SWTBot对象。 4. **编写测试用例**:使用SWTBot API编写测试步骤,模拟用户操作并验证结果。 5. **执行测试**:运行测试类,查看测试报告以确定应用...
1. **创建新的Java项目**:在Eclipse中,通过菜单“File -> New -> Java Project”创建一个新的Java项目。 2. **添加SWT依赖**:为了能够使用SWT库,需要将SWT的JAR文件添加到项目的构建路径中。这可以通过右键点击...