`
longgangbai
  • 浏览: 7330986 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SWTBot中 dialogs的处理

阅读更多

              官方问题文档地址:

                             http://wiki.eclipse.org/SWTBot/FAQ

              官方文档描述如下:

                          Why do tests run on a non-UI thread?

A lot of events that SWTBot sends to the UI are blocking. SWT dialogs are one of them. This means that functions opening dialogs, will block until the dialog closes. Since we do not want tests to block when a dialog open up, SWTBot runs in a non-UI thread, and posts events to the UI thread.

There are two solutions to this:

  1. Make the dialog non-modal, by invoking Dialog#setBlockOnOpen(false)
  2. Open the dialog in a non-ui thread

SWTBot chooses the later approach, since the first approach is not always practical.

 

翻译如下:

       SWTBot发送给SWT UI的一些事件为阻塞事件。SWT dialog就是这种情况。那将以为当对话框打开时候,将阻塞UI主线程,直到dialog关闭。所以dialog打开的时候,我们不能测试。因为SWTBot运行在一个非UI的线程中,发送事件到UI线程。

这种情况的解决有两种情况:

1.将dialog设置为非模式对话框,通过设置dialog的setBlockOnOpen(false);

2.在非UI线程下打开dialog。

 

How do I execute parts of tests that need UI thread?

Since SWTBot runs on a non-UI thread, all your code using PlatformUI.getWorkbench() will generally result with a NullPointerException, since PlatformUI.getWorkbench() returns null in non-UI threads.

If you really need to invoke or execute code that needs UI-thread (such as opening an editor without simulating click on New and so on), you can useDisplay.getDefault().syncExec() to wrap the piece of code that requires UI-thread in your tests:

翻译如下:

       SWTBot运行在一个非UI线程下,因为所有PlatformUI.getWorkbench() 在非线程下返回为空,所以使用PlatformUI.getWorkbench() 测试获取的结果为为空异常。

       如果你需要执行UI线程下面的代码,你可以使用Display.getDefault().syncExec() 去封装测试中UI线程的相关的代码。

 

@Test
public void testDiagram() throws ExecutionException {
	// part of test that requires UI-thread
	Display.getDefault().syncExec(new Runnable() {
		public void run() {
			try {
				new NewProcessCommandHandler().execute(null); // requires UI-thread since it is gonna invoke PlatformUI.getWorkbench()
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
	});
 
	// Normal SWTBot execution
	SWTBotEditor botEditor = bot.activeEditor();
	SWTBotGefEditor gmfEditor = bot.gefEditor(botEditor.getTitle());
	gmfEditor.activateTool("Step");
	gmfEditor.mouseMoveLeftClick(200, 200);
}









Why do I have to run tests as SWTBot tests, instead of PDE-JUnit tests?

PDE-Junit tests run on the UI thread. SWTBot needs that tests run on a non-UI thread, hence a new run configuration. See Why do tests run on a non-UI thread?for more info. You could also run SWTBot test as plain JUnit/PDE tests, just ensure that the "Run in UI Thread" checkbox is not ticked.

        

分享到:
评论

相关推荐

    swtbot 详细例子说明

    4. **异常处理**:在测试过程中,如何捕获和处理可能出现的错误或异常。 5. **测试组织**:如何使用JUnit或其他测试框架组织测试用例,确保测试的顺序和独立性。 6. **测试驱动开发**:SWTBot如何帮助实现TDD(Test-...

    swtbot详细例子说明网页分享

    首先,在Eclipse中打开`Help` -> `Install New Software`,然后添加SWTBot的更新站点地址,选择要安装的版本,按照向导提示完成安装。 ### 示例详解 一个简单的SWTBot测试示例可能如下: ```java import org....

    swtbot学习资料

    在SWTBot中,你可以使用查找机制来定位GUI元素。这可以通过Widget的属性,如标签、ID或位置来实现。例如,`bot.button("OK")` 将找到并返回一个标签为"OK"的按钮对象,然后可以调用其方法执行点击操作。 接下来,...

    SWTBot收集

    使用SWTBot,你可以编写测试脚本来模拟用户在Eclipse RCP应用中的各种操作。例如,你可以创建一个测试来打开特定的视图,点击某个按钮,检查结果是否符合预期。SWTBot提供了如`Bot.button()`、`Bot.menu()`和`Bot....

    SWTBot自动化测试学习软件

    在学习SWTBot的过程中,首先需要理解SWT和RCP的概念。SWT是Eclipse项目开发的一种轻量级的图形用户界面库,它允许开发者构建与操作系统原生UI紧密集成的Java应用程序。RCP则是Eclipse平台提供的一种框架,用于快速...

    swtbot运行原理

    当一个测试脚本执行时,SWTBot会注入一个特殊的事件监听器到SWT组件中,这个监听器能够捕获并处理所有与用户交互相关的事件。 在SWTBot的运行过程中,主要包含以下几个步骤: 1. **初始化**:测试开始前,SWTBot会...

    SWTBot插件包及例子

    标题中的"SWTBot插件包"指的是一个包含SWTBot库及相关工具的集合,它为Eclipse开发环境提供了一种集成的测试解决方案。通过安装这个插件,开发者可以利用SWTBot的强大功能来自动化SWT和JFace构建的图形用户界面(GUI...

    使用SWTBOT进行GUI自动化测试

    根据给定的部分内容,我们可以了解到一个具体的实践案例:使用SWTBOT对名为“Pegasus RCP”的应用程序中的“File Menu”选项进行自动化测试。该测试包括了30个测试用例,总共有近1500行代码,旨在验证File Menu的...

    swtbot eclipse插件 测试界面

    swtbot eclipse插件 测试界面

    Web页面测试-swtbot

    #### 五、sbtwot工具在Web测试中的应用 sbtwot(应为swtbot)是一种开源的Java GUI测试工具,它专注于测试Swing和SWT/SWT JFace UI组件。尽管swtbot最初是为了测试桌面应用程序而设计的,但它也可以用于Web页面测试...

    SWTBot - SWT/Eclipse functional testing-开源

    SWTBot是用于SWT / RCP应用程序的自动化和测试工具,具有记录和回放脚本的功能。 功能将包括基于文本的脚本,对测试套件的回放,报告和多线程回放的ant支持。

    eclipse4.4.4+gmf+swtbot

    NULL 博文链接:https://mwhgjava.iteye.com/blog/2257771

    SWT的详解,例子,介绍

    7. **异常处理和错误报告**:理解如何捕获和处理测试过程中的异常,以及如何生成有用的错误报告。 8. **实战示例**:通过实际的项目案例,加深对SWTBOT用法的理解,例如创建一个简单的Eclipse插件并编写自动化测试...

    scenarioo-e4-swtbot-example-integration

    方案示例-swtbot-e4 结合使用场景和SWTBot来测试和记录Eclipse RCP e4示例应用程序的示例UI测试和Scenarioo集成可在plugins/org.scenarioo.example.e4.test/src/org/scenarioo/example/e4文件夹中找到。构建并运行...

    pdi-ui-test:基于SWTBot的用于Pentaho数据集成的UI测试的集合

    PDI以其灵活的脚本语言(Transformation和Job)和可视化界面而闻名,广泛应用于数据整合和大数据处理场景。 【自动化测试】在软件开发过程中,自动化测试是一种关键的质量保证手段。它通过编写可重复执行的测试脚本...

    SWT的自动化测试框架

    6. **异常处理和调试**:如果测试失败,可以利用SWTBot提供的信息定位问题,进行调试和修复。 **四、SWTBot与其他测试框架的比较** 虽然SWTBot专为SWT和RCP应用设计,但与其他自动化测试框架如Selenium相比,它的...

    如何为EclipseJFaceUI运行单元测试Java开发

    4. 在Eclipse中配置JUnit运行配置,指定SWTBot测试运行器。 5. 运行测试并根据结果迭代改进代码。 通过遵循这些步骤,开发者可以有效地对Eclipse JFace UI应用程序进行单元测试,确保代码的质量和稳定性。

    SWT 整理出的部分资料

    SWT(Standard Widget Toolkit)是Java编程环境中用于创建桌面应用程序的一种图形用户界面(GUI)工具包,由Eclipse基金会维护。它提供了丰富的组件库,使得开发者可以构建功能强大的跨平台应用。以下是对SWT相关...

Global site tag (gtag.js) - Google Analytics