Code Monkey home page Code Monkey logo

agileselenium's Introduction

Getting Started

With the NatSpec Selenium Library you can create UI tests in natural language using NatSpec and Selenium in an easy way. If you are not familiar with NatSpec you should first read the NatSpec Getting Started. Knowledge of the Selenium library is not required.

Provider

To configure the NatSpec Selenium Library you have to create a class wich extends the AgileSeleniumProviderEN class and implements the ISyntaxPatternProvider interface. In this class all available pages of your application are registered with its components.

To create the provider class you have to import three dependencies from NatSpec:

de.devboost.natspec,
de.devboost.agileselenium.patternprovider,
de.devboost.natspec.testscripting.java

An example of this class could look like this:

package de.agileselenium.provider;

import de.devboost.agileselenium.patternprovider.AgileSeleniumProviderEN;
import de.devboost.agileselenium.patternprovider.Component;
import de.devboost.agileselenium.patternprovider.ComponentType;
import de.devboost.agileselenium.patternprovider.Page;
import de.devboost.natspec.patterns.ISyntaxPatternProvider;


public class PatternProvider extends AgileSeleniumProviderEN implements ISyntaxPatternProvider {

	public PatternProvider() {
		super("/de.agileselenium.test/", 
				
				new Page("HomeScreen", "/", 
						new Component("#password_field", "Password", ComponentType.PASSWORDFIELD),
						new Component("#username_field", "Username", ComponentType.TEXTFIELD),
						new Component("#submit", "Submit", ComponentType.BUTTON)	
				),
				
				new Page("OrderScreen", "/order", 
						new Component("#order_table", "OrderTable",ComponentType.TABLE)
						/* ... */
				)
				/* ... */
		);
	}
}

You have to implement a parameterless constructor for this class. The first argument of the super call is the qualified name of the package that contains your Selenium Tests. In this example it is "/de.agileselenium.test/". All other arguments are instances of the IPage interface which defines the registered Pages of your application. You can use the already implemented Page class:

new Page("HomeScreen", "/", 
  	new Component("#password_field", "Password", ComponentType.PASSWORDFIELD),
  	new Component("#username_field", "Username", ComponentType.TEXTFIELD),
  	new Component("#submit", "Submit", ComponentType.BUTTON)	
)

The first argument is the name of the screen which is used in your NatSpec tests, the second the url of the screen. All other arguments are instances of IComponent to specify the components that are in your page. To create a component you can use the Component class. You have to define the CSS-Selector of the component (e.g. #password_field) the name which is used in the tests (e.g. Password) and the type of the component (e.g. ComponentType.PASSWORDFIELD).

The pages and the components defined in the Provider class are used to generate the NatSpec sentences you can use in your Selenium Tests. For example you can use the Navigate to HomeScreen sentence when you have declared your HomeScreen in the provider class.

Testing with NatSpec and Selenium

After you have finished the configuration you can start writing your NatSpec tests. All you have to do is to create a _NatSpecTemplate in the same way you would create one for another NatSpec test. If you are not familiar with NatSpec you can read the NatSpec Getting Started. You can create one with the Eclipse wizard. Then you have add a field of the type SeleniumSupport to register the test support class for this template. In this example the _NatSpecTemplate could look like this:

package de.agileselenium.test;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import de.devboost.agileselenium.HtmlSeleniumSupport;
import de.devboost.agileselenium.SeleniumSupport;


@SuppressWarnings("unused")
public class _NatSpecTemplate {
	private SeleniumSupport seleniumSupport = new SeleniumSupport(new HtmlSeleniumSupport());

	@Test
	public void executeScript() throws Exception {
		/* @MethodBody */
	}

	@Before
	public void setUp() { /* ... */ }
	
	@After
	public void shutdown() { /* ... */ }
}

In this case we use new HtmlSeleniumSupport() to create the selenium support class for an HTML application. You can also use the VaadinSeleniumSupport class or create your own support class.

When you now create a new NatSpec test you should have sentences for navigating to all of your screens.

Note that all sentences are context specific. This means that you only get suggestions for components that are in your screens. Have fun writing natural language tests with Selenium and NatSpec.

agileselenium's People

Contributors

fhanspach avatar

Watchers

 avatar  avatar  avatar  avatar

agileselenium's Issues

Exception when running all 143 tests.

com.thoughtworks.selenium.SeleniumException: Component returned failure code: 0x804b000a (NS_ERROR_MALFORMED_URI) [nsIIOService.newURI]
Command duration or timeout: 10.09 seconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
Session ID: 3a155bee-cbda-4eac-8ea9-4b81687b8b8e
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=22.0}]
at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:44)
at org.openqa.selenium.internal.seleniumemulation.Timer.run(Timer.java:40)
at org.openqa.selenium.WebDriverCommandProcessor.execute(WebDriverCommandProcessor.java:140)
at org.openqa.selenium.WebDriverCommandProcessor.doCommand(WebDriverCommandProcessor.java:70)
at com.thoughtworks.selenium.DefaultSelenium.open(DefaultSelenium.java:369)
at de.devboost.agileselenium.HtmlSeleniumSupport.navigateTo(HtmlSeleniumSupport.java:34)
at de.devboost.agileselenium.SeleniumSupport.navigateTo(SeleniumSupport.java:38)
at de.devboost.agileselenium.test.datefield.AssertDatePickerHasValue.executeScript(AssertDatePickerHasValue.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.openqa.selenium.WebDriverException: Component returned failure code: 0x804b000a (NS_ERROR_MALFORMED_URI) [nsIIOService.newURI]
Command duration or timeout: 10.09 seconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
Session ID: 3a155bee-cbda-4eac-8ea9-4b81687b8b8e
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=22.0}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:276)
at org.openqa.selenium.internal.seleniumemulation.Open.handleSeleneseCommand(Open.java:44)
at org.openqa.selenium.internal.seleniumemulation.Open.handleSeleneseCommand(Open.java:26)
at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:35)
... 40 more
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Component returned failure code: 0x804b000a (NS_ERROR_MALFORMED_URI) [nsIIOService.newURI]
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
Driver info: driver.version: unknown

NPE wenn nach full clean SyntaxPatternView geöffnet wird

java.lang.NullPointerException
    at de.devboost.agileselenium.patternprovider.AbstractAgileSeleniumProvider.getPatterns(AbstractAgileSeleniumProvider.java:27)
    at de.devboost.natspec.testscripting.ui.views.SyntaxPatternView.addNodesForPatterns(SyntaxPatternView.java:122)
    at de.devboost.natspec.testscripting.ui.views.SyntaxPatternView.addNodesForPatterns(SyntaxPatternView.java:115)
    at de.devboost.natspec.testscripting.ui.views.SyntaxPatternView.refreshTreeContentThreadUnsafe(SyntaxPatternView.java:103)
    at de.devboost.natspec.testscripting.ui.views.SyntaxPatternView.refreshTreeContent(SyntaxPatternView.java:84)
    at de.devboost.natspec.testscripting.ui.views.SyntaxPatternView.partChanged(SyntaxPatternView.java:334)
    at de.devboost.natspec.testscripting.ui.views.AbstractView$1.refresh(AbstractView.java:35)
    at de.devboost.natspec.testscripting.ui.views.AbstractPartListener2.partOpened(AbstractPartListener2.java:40)
    at org.eclipse.ui.internal.WorkbenchPage$21.run(WorkbenchPage.java:4924)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.WorkbenchPage.firePartOpened(WorkbenchPage.java:4921)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart$2.handleEvent(CompatibilityPart.java:116)
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:156)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4732)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:218)
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
    at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
    at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
    at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
    at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:81)
    at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
    at org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl.setObject(PartImpl.java:410)
    at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:547)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531)
    at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:69)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
    at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1246)
    at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer$1.handleEvent(LazyStackRenderer.java:69)
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:156)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4732)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:218)
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
    at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
    at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
    at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
    at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:81)
    at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
    at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:171)
    at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:108)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:678)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.handleEvent(PartRenderingEngine.java:141)
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:156)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4732)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:218)
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
    at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
    at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
    at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
    at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:81)
    at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
    at org.eclipse.e4.ui.model.application.ui.impl.UIElementImpl.setToBeRendered(UIElementImpl.java:303)
    at org.eclipse.e4.ui.workbench.addons.cleanupaddon.CleanupAddon.subscribeRenderingChanged(CleanupAddon.java:265)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler$1.run(UIEventObjectSupplier.java:56)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:156)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4732)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:218)
    at org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler.handleEvent(UIEventObjectSupplier.java:53)
    at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
    at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
    at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
    at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:81)
    at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
    at org.eclipse.e4.ui.model.application.ui.impl.UIElementImpl.setToBeRendered(UIElementImpl.java:303)
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:485)
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:454)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:705)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:682)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:620)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:608)
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1137)
    at org.eclipse.ui.internal.WorkbenchPage.showPart(WorkbenchPage.java:1292)
    at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1283)
    at org.eclipse.ui.internal.WorkbenchPage$14.run(WorkbenchPage.java:4208)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4204)
    at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4184)
    at org.eclipse.ui.internal.quickaccess.ViewElement.execute(ViewElement.java:71)
    at org.eclipse.ui.internal.quickaccess.SearchField$2.handleElementSelected(SearchField.java:179)
    at org.eclipse.ui.internal.quickaccess.QuickAccessContents.handleSelection(QuickAccessContents.java:461)
    at org.eclipse.ui.internal.quickaccess.QuickAccessContents.access$0(QuickAccessContents.java:451)
    at org.eclipse.ui.internal.quickaccess.QuickAccessContents$1.keyPressed(QuickAccessContents.java:496)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:167)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4199)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1504)
    at org.eclipse.swt.widgets.Text.sendKeyEvent(Text.java:1634)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1500)
    at org.eclipse.swt.widgets.Text.sendKeyEvent(Text.java:1600)
    at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1060)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5730)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:221)
    at org.eclipse.swt.widgets.Widget.superKeyDown(Widget.java:1908)
    at org.eclipse.swt.widgets.Widget.keyDown(Widget.java:1085)
    at org.eclipse.swt.widgets.Control.keyDown(Control.java:2400)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5640)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:221)
    at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2105)
    at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2329)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5702)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5139)
    at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5288)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:128)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3666)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1465)

Zeitabhängigkeiten zwischen den Operation auflösen

Beispiel:

Eine Progressbar wird aktualisiert, wenn ein Wert in das Textfiel eingegeben wird. Der Test schlägt zur Zeit noch fehl, weil die Überprüfung des Wertes der Progressbar abgeschlossen ist, bevor sie aktualisert wurde.
`
Eine Lösung für dieses Problem wird benötigt.

Add vaadin only tests

You have tests that are vaadin only. The HTML implementation throws a UnsupportedOperation. Please fix this, you can see how to do this in the other packages

DateFormatException in den DatePicker Tests wenn die Lokalisierung deutsch ist.

java.text.ParseException: Unparseable date: "20.07.16"
    at java.text.DateFormat.parse(DateFormat.java:357)
    at de.devboost.agileselenium.VaadinSeleniumSupport.getCurrentDate(VaadinSeleniumSupport.java:485)
    at de.devboost.agileselenium.VaadinSeleniumSupport.selectDateInDatePicker(VaadinSeleniumSupport.java:391)
    at de.devboost.agileselenium.SeleniumSupport.selectDateInDatePicker(SeleniumSupport.java:190)
    at de.devboost.agileselenium.test.datepicker.SelectInDatePickerAlreadyCorrectTest.executeScript(SelectInDatePickerAlreadyCorrectTest.java:63)

Problem: 1 Component - 2 Pages

Found multiple matching syntax patterns:
[ Assert column Many [StringParameter] in TableUnderTest4 is sorted [asc | desc],
Assert column Many [StringParameter] in TableUnderTest4 is sorted [asc | desc]]

Funktionsdokumentation der Satzfunktionalitäten (List select, List builder, Option Group, Check box)

Zur Dokumentation der Sätze ist es wichtig die internen Spezifikationen der zugrunde liegenden Funktion zu dokumentieren.

Drin stehen muss:

Welche Anforderungen werden an die zu testende Komponente gestellt?
Worauf muss man achten, wenn man die Funktion benutzt?
Was ist eventuell noch verbesserungswürdig, aber wurde aus Zeitgründen nach hinten geschoben?
Was passiert im Fehlerfall der Funktion
Eigentlich typisch Javadoc Style. Schnittstellendokumenation. Worauf muss an den Schnittstellen geachtet werden. Und damit man nicht in den Quellcode schauen muss, um einen auftretenden Fehler oder Rückgabewert zu verstehen.

Funktionsdokumentation der Satzfunktionalitäten (Table, Tree table, Button, Menu bar)

Zur Dokumentation der Sätze ist es wichtig die internen Spezifikationen der zugrunde liegenden Funktion zu dokumentieren.

Drin stehen muss:

Welche Anforderungen werden an die zu testende Komponente gestellt?
Worauf muss man achten, wenn man die Funktion benutzt?
Was ist eventuell noch verbesserungswürdig, aber wurde aus Zeitgründen nach hinten geschoben?
Was passiert im Fehlerfall der Funktion
Eigentlich typisch Javadoc Style. Schnittstellendokumenation. Worauf muss an den Schnittstellen geachtet werden. Und damit man nicht in den Quellcode schauen muss, um einen auftretenden Fehler oder Rückgabewert zu verstehen.

Recherche nach geeigneter Beispielapplikation

Die Dokumentation soll unter anderem anhand einer geeigneten Beispielapplikation geschehen. Um das Testframework an verschiedenen Webframeworks auszuprobieren wäre es von Vorteil, wenn die Beispielapplikation gleich mit mehreren dieser Webframeworks umgesetzt worden wäre.

Parsen Dynamischer Tabellen - Speed Up

Die Funktionalität dauert einfach zu lange, da er in jeder Zeile jede Zelle parst. Besser wäre es die Tabelle mit einem Identifier bei der Konfiguration versehen zu können, damit man bei dem Parsen davon ausgehen kann, das eine Spalte nur eindeutige Wert besitzt.

Dann kann man in den Tests nurnoch auf dieser Spalte arbeiten, beim identifizieren der Zeile-

Funktionsdokumentation der Satzfunktionalitäten (Date field, Date picker, Navigate to, Label)

Zur Dokumentation der Sätze ist es wichtig die internen Spezifikationen der zugrunde liegenden Funktion zu dokumentieren.

Drin stehen muss:

Welche Anforderungen werden an die zu testende Komponente gestellt?
Worauf muss man achten, wenn man die Funktion benutzt?
Was ist eventuell noch verbesserungswürdig, aber wurde aus Zeitgründen nach hinten geschoben?
Was passiert im Fehlerfall der Funktion
Eigentlich typisch Javadoc Style. Schnittstellendokumenation. Worauf muss an den Schnittstellen geachtet werden. Und damit man nicht in den Quellcode schauen muss, um einen auftretenden Fehler oder Rückgabewert zu verstehen.

Funktionsdokumentation der Satzfunktionalitäten (Textfield, Textarea, Combobox, Progressbar, Dropdown menu)

Zur Dokumentation der Sätze ist es wichtig die internen Spezifikationen der zugrunde liegenden Funktion zu dokumentieren.

Drin stehen muss:

  • Welche Anforderungen werden an die zu testende Komponente gestellt?
  • Worauf muss man achten, wenn man die Funktion benutzt?
  • Was ist eventuell noch verbesserungswürdig, aber wurde aus Zeitgründen nach hinten geschoben?
  • Was passiert im Fehlerfall der Funktion

Eigentlich typisch Javadoc Style. Schnittstellendokumenation. Worauf muss an den Schnittstellen geachtet werden. Und damit man nicht in den Quellcode schauen muss, um einen auftretenden Fehler oder Rückgabewert zu verstehen.

Getting Started Dokumentation

"Ich möchte das Framework nutzen und will wissen wie ich mein Testprojekt aufsetzten kann. Was brauche ich dafür (Voraussetzungen)? Was muss ich tun (Anleitung)? Was sind die Möglichkeiten (Anhand eines kleinen Beispiels den Basis Workflow vom Framework zeigen)?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.