SWTBot is continuously tested on a grid of [http://cruise.thoughtworks.com cruise servers] that run windows XP/2003, linux/gtk 32 bit and 64 bit and macosx(carbon).

+

+

SWTBot can be built and tested on any platform. However, the Continuous Integration jobs test it on Linux, with Eclipse 3.8 and Eclipse 4.2.

+

+

===How often is SWTBot released?===

+

+

There's no release plan. We follow the [http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html release early release often] philosophy. SWTBot is a fairly small project and we push updates as and when we add some new API or fix some bugs.

+

+

Typically a build is published when there's about a 6-7 checkins since the last release :)

===Why do tests run on a non-UI thread?===

===Why do tests run on a non-UI thread?===

Line 47:

Line 54:

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? | Why do tests run on a non-UI thread?]] for more info.

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? | 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.

===Can I slow down the execution speed of SWTBot tests?===

===Can I slow down the execution speed of SWTBot tests?===

Line 76:

Line 84:

===How do I configure log4j to turn on logging for SWTBot? ===

===How do I configure log4j to turn on logging for SWTBot? ===

−

Copy the file http://dev.eclipse.org/svnroot/technology/org.eclipse.swtbot/trunk/org.eclipse.swtbot.swt.finder.test/src/log4j.xml to the src directory in your plugin. Ensure that the plugin's MANIFEST.MF contains the following lines, note the dependency on org.apache.log4j

+

Copy the file https://github.com/ketan/SWTBot/blob/master/org.eclipse.swtbot.swt.finder.test/src/log4j.xml to the src directory in your plugin. Ensure that the plugin's MANIFEST.MF contains the following lines, note the dependency on org.apache.log4j

<pre>

<pre>

−

Require-Bundle: com.example.foo,

+

Require-Bundle: org.eclipse.swtbot.go,

org.apache.log4j

org.apache.log4j

Eclipse-RegisterBuddy: org.apache.log4j

Eclipse-RegisterBuddy: org.apache.log4j

Line 125:

Line 133:

===Can I test an exported eclipse product===

===Can I test an exported eclipse product===

−

You can. You need to ensure that some bits of SWTBot are present in your product. SWTBot cannot run tests on a product if there's no agent sitting inside the product :)

+

You can. You need to ensure that some bits of SWTBot are present in your product at the time you are running your tests. SWTBot cannot run tests on a product if there's no agent sitting inside the product :)

−

Here's the gory details:

+

Here are 3 ways to have this working, by order of preference:

+

+

==== Using p2 to install the SWTBot headless feature ====

+

+

This is the preferred method when your product is p2-ready.

+

+

Use the [[Equinox p2 director application]] to install the headless feature, and any other SWTBot modules you need (GEF, Forms...) to your product.

The exact IUs to be installed will vary, the above is an example. To get a list of all the IUs you can possibly install, run the above command with just the SWTBot repository and the "-list" option instead of "-installIU".

+

+

Installing the IU "org.eclipse.swtbot.eclipse.feature.group", previously recommended here, will install everything you could possibly ever want and probably a lot more besides. Note in particular that it depends on org.eclipse.ui.ide, which when installed will cause various additional menu items, such as "Convert Line Delimiters To..." to be added to your product. This may then make it awkward to use the product for anything other than headless testing.

+

+

==== Copy-paste feature in your product ====

+

+

Simply download the feature from SWTBot download site, and copy-paste it to your product directory (if not p2-ready), or in the dropins folder (if product is p2-ready).

+

+

You may hit some missong dependency. Resolve them using the OSGi console:

Can SWTBot be used to test RCP Applications?

Yes SWTBot can be used to test any kind of SWT apps -- SWT, Eclipse plugins and RCP applications.

What platforms is SWTBot tested on?

SWTBot can be built and tested on any platform. However, the Continuous Integration jobs test it on Linux, with Eclipse 3.8 and Eclipse 4.2.

How often is SWTBot released?

There's no release plan. We follow the release early release often philosophy. SWTBot is a fairly small project and we push updates as and when we add some new API or fix some bugs.

Typically a build is published when there's about a 6-7 checkins since the last release :)

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.

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

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 use Display.getDefault().syncExec() to wrap the piece of code that requires UI-thread in your tests:

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.

Can I slow down the execution speed of SWTBot tests?

Yes you can! To slow down the speed of execution of SWTBot, you need to set the system property "org.eclipse.swtbot.playback.delay". This delay is in milliseconds. You can also set this property in code as follows:

// slow down tests
SWTBotPreferences.PLAYBACK_DELAY=10;// set to the default speed
SWTBotPreferences.PLAYBACK_DELAY=0;

Can I change the timeout for execution of SWTBot tests?

Yes you can! To change the timeout, you need to set the system property "org.eclipse.swtbot.search.timeout". The timeout is specified in milliseconds. You can also set this property in code as follows:

// increase timeout to 10 seconds
SWTBotPreferences.TIMEOUT=10000;// set to the default timeout of 5 seconds
SWTBotPreferences.TIMEOUT=5000;

Can I change the poll delay for evaluating conditions in SWTBot tests?

Yes you can! To change the poll delay, you need to set the system property "org.eclipse.swtbot.playback.poll.delay". The poll delay is specified in milliseconds. You can also set this property in code as follows:

// increase timeout to 1 second
SWTBotPreferences.DEFAULT_POLL_DELAY=1000;// set to the default timeout of 500ms.
SWTBotPreferences.DEFAULT_POLL_DELAY=500;

Does SWTBot support my keyboard layout?

How do I use SWTBot to test native dialogs (File Dialogs, Color Dialogs, etc)?

You can't! Very unfortunate but true.

SWT does not have support to recognize native dialogs, and SWTBot therefore cannot test them. See eclipse bug #164191 for more info. Consider adding a comment and a vote on that bug as well.

How do I test a login dialog using SWTBot

You can't! The login dialog pops up before SWTBot gets an opportunity to initialize itself. A good workaround is to make the license dialog a bit intelligent so you can bypass it by setting the username and password as a system property. A login dialog like this is a good choice:

You can then start SWTBot tests with the following JVM arguments. You may set these JVM args in the target platform(preferred) or the launch configuration for the SWTBot test.

-Dcom.yourapp.username=joe -Dcom.yourapp.password=secret

Can I test an exported eclipse product

You can. You need to ensure that some bits of SWTBot are present in your product at the time you are running your tests. SWTBot cannot run tests on a product if there's no agent sitting inside the product :)

The exact IUs to be installed will vary, the above is an example. To get a list of all the IUs you can possibly install, run the above command with just the SWTBot repository and the "-list" option instead of "-installIU".

Installing the IU "org.eclipse.swtbot.eclipse.feature.group", previously recommended here, will install everything you could possibly ever want and probably a lot more besides. Note in particular that it depends on org.eclipse.ui.ide, which when installed will cause various additional menu items, such as "Convert Line Delimiters To..." to be added to your product. This may then make it awkward to use the product for anything other than headless testing.

Copy-paste feature in your product

Simply download the feature from SWTBot download site, and copy-paste it to your product directory (if not p2-ready), or in the dropins folder (if product is p2-ready).

You may hit some missong dependency. Resolve them using the OSGi console: