├── .circleci └── config.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.md ├── development ├── eclipse_formatter.xml ├── intellij-formatter-settings.jar └── intellij_formatter.xml ├── docker-compose.yml ├── logo.png ├── pom.xml ├── webtester-core ├── pom.xml └── src │ ├── main │ └── java │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ ├── WebTesterException.java │ │ ├── adhoc │ │ ├── AdHocFinder.java │ │ ├── ByFinder.java │ │ └── TypeFinder.java │ │ ├── browser │ │ ├── Browser.java │ │ ├── BrowserBuilder.java │ │ ├── BrowserFactory.java │ │ ├── WebDriverBrowser.java │ │ ├── factories │ │ │ ├── BaseBrowserFactory.java │ │ │ ├── ChromeFactory.java │ │ │ ├── EdgeFactory.java │ │ │ ├── FirefoxFactory.java │ │ │ ├── InternetExplorerFactory.java │ │ │ ├── MarionetteFactory.java │ │ │ ├── OperaFactory.java │ │ │ └── RemoteFactory.java │ │ ├── operations │ │ │ ├── AlertHandler.java │ │ │ ├── BaseBrowserOperation.java │ │ │ ├── CurrentWindow.java │ │ │ ├── FocusSetter.java │ │ │ ├── JavaScriptExecutor.java │ │ │ ├── Navigator.java │ │ │ ├── PageSourceSaver.java │ │ │ ├── ScreenshotTaker.java │ │ │ └── UrlOpener.java │ │ └── proxy │ │ │ ├── NoProxyConfiguration.java │ │ │ └── ProxyConfiguration.java │ │ ├── conditions │ │ ├── Condition.java │ │ ├── Conditions.java │ │ ├── collections │ │ │ └── NotEmpty.java │ │ ├── pagefragments │ │ │ ├── Attribute.java │ │ │ ├── AttributeWithValue.java │ │ │ ├── Disabled.java │ │ │ ├── Editable.java │ │ │ ├── Enabled.java │ │ │ ├── Interactable.java │ │ │ ├── Invisible.java │ │ │ ├── Present.java │ │ │ ├── PresentAndVisible.java │ │ │ ├── ReadOnly.java │ │ │ ├── Selected.java │ │ │ ├── SelectedIndex.java │ │ │ ├── SelectedIndices.java │ │ │ ├── SelectedText.java │ │ │ ├── SelectedTexts.java │ │ │ ├── SelectedValue.java │ │ │ ├── SelectedValues.java │ │ │ ├── Visible.java │ │ │ ├── VisibleTextContains.java │ │ │ └── VisibleTextEquals.java │ │ ├── syntax │ │ │ ├── Either.java │ │ │ ├── Has.java │ │ │ ├── Is.java │ │ │ └── Not.java │ │ └── values │ │ │ └── EqualTo.java │ │ ├── config │ │ ├── BaseConfiguration.java │ │ ├── Configuration.java │ │ ├── ConfigurationAdapter.java │ │ ├── ConfigurationBuilder.java │ │ ├── ConfigurationException.java │ │ ├── ConfigurationExporter.java │ │ ├── adapters │ │ │ ├── AbstractPropertiesConfigurationAdapter.java │ │ │ ├── ClasspathPropertiesFileConfigurationAdapter.java │ │ │ ├── GlobalFileConfigurationAdapter.java │ │ │ └── LocalFileConfigurationAdapter.java │ │ ├── builders │ │ │ ├── BaseConfigurationBuilder.java │ │ │ └── DefaultConfigurationBuilder.java │ │ ├── exceptions │ │ │ ├── InvalidValueTypeException.java │ │ │ └── SetNullValuesException.java │ │ └── exporters │ │ │ └── SystemPropertyConfigurationExporter.java │ │ ├── css │ │ ├── CssProperties.java │ │ ├── DefaultStyleChanger.java │ │ └── StyleChanger.java │ │ ├── events │ │ ├── AbstractEvent.java │ │ ├── DispatchingEventSystem.java │ │ ├── Event.java │ │ ├── EventListener.java │ │ ├── EventSystem.java │ │ ├── ExceptionEvent.java │ │ ├── PageFragmentEventBuilder.java │ │ ├── Produces.java │ │ ├── browser │ │ │ ├── AcceptedAlertEvent.java │ │ │ ├── ClosedBrowserEvent.java │ │ │ ├── ClosedWindowEvent.java │ │ │ ├── DeclinedAlertEvent.java │ │ │ ├── MaximizedWindowEvent.java │ │ │ ├── NavigatedBackwardsEvent.java │ │ │ ├── NavigatedForwardsEvent.java │ │ │ ├── OpenedUrlEvent.java │ │ │ ├── RefreshedPageEvent.java │ │ │ ├── SavedSourceCodeEvent.java │ │ │ ├── SetWindowPositionEvent.java │ │ │ ├── SetWindowSizeEvent.java │ │ │ ├── SwitchedToDefaultContentEvent.java │ │ │ ├── SwitchedToFrameEvent.java │ │ │ ├── SwitchedToWindowEvent.java │ │ │ └── TookScreenshotEvent.java │ │ ├── listeners │ │ │ └── TakeScreenshotOnExceptionListener.java │ │ └── pagefragments │ │ │ ├── AbstractPageFragmentEvent.java │ │ │ ├── AbstractPageFragmentEventBuilder.java │ │ │ ├── ClearedEvent.java │ │ │ ├── ClickedEvent.java │ │ │ ├── ContextClickedEvent.java │ │ │ ├── DeselectedAllEvent.java │ │ │ ├── DeselectedByIndicesEvent.java │ │ │ ├── DeselectedByTextsEvent.java │ │ │ ├── DeselectedByValuesEvent.java │ │ │ ├── DoubleClickedEvent.java │ │ │ ├── DraggedAndDroppedEvent.java │ │ │ ├── EnterPressedEvent.java │ │ │ ├── FormSubmittedEvent.java │ │ │ ├── NumberSetEvent.java │ │ │ ├── SelectedByIndexEvent.java │ │ │ ├── SelectedByIndicesEvent.java │ │ │ ├── SelectedByTextEvent.java │ │ │ ├── SelectedByTextsEvent.java │ │ │ ├── SelectedByValueEvent.java │ │ │ ├── SelectedByValuesEvent.java │ │ │ ├── SelectionChangedEvent.java │ │ │ ├── TextAppendedEvent.java │ │ │ └── TextSetEvent.java │ │ ├── internal │ │ ├── ActionTemplate.java │ │ ├── ClasspathUtils.java │ │ ├── OffersAdHocFinding.java │ │ ├── OffersBrowserGetter.java │ │ ├── OffersPageCreation.java │ │ ├── annotations │ │ │ ├── CreatesPage.java │ │ │ ├── ReturnsBrowser.java │ │ │ ├── ReturnsName.java │ │ │ └── ReturnsWebElement.java │ │ ├── configuration │ │ │ ├── DefaultValue.java │ │ │ ├── Documentation.java │ │ │ ├── NamedProperties.java │ │ │ ├── NamedPropertiesConfigurationAdapter.java │ │ │ └── TypeDefinition.java │ │ ├── exceptions │ │ │ └── IllegalSignatureException.java │ │ ├── implementation │ │ │ ├── PageFactory.java │ │ │ ├── PageFragmentFactory.java │ │ │ ├── advices │ │ │ │ ├── ActionAdvice.java │ │ │ │ ├── EventProducerAdvice.java │ │ │ │ └── MarkingAdvice.java │ │ │ ├── exceptions │ │ │ │ ├── DynamicImplementationException.java │ │ │ │ ├── NoDefaultConstructorException.java │ │ │ │ └── UnsupportedReturnTypeException.java │ │ │ ├── invocationhandler │ │ │ │ ├── AttributeInvocationHandler.java │ │ │ │ ├── IdentifyUsingInvocationHandler.java │ │ │ │ └── KotlinDefaultMethodHandler.java │ │ │ ├── pagefragments │ │ │ │ ├── BasePageFragment.java │ │ │ │ ├── ByteBuddyPageFragmentFactory.java │ │ │ │ ├── DynamicWebElementSupplier.java │ │ │ │ ├── PageFragmentImplementation.java │ │ │ │ ├── StaticWebElementSupplier.java │ │ │ │ └── exceptions │ │ │ │ │ ├── PageFragmentCreationException.java │ │ │ │ │ └── PageFragmentMustBeInterfaceException.java │ │ │ └── pages │ │ │ │ ├── BasePage.java │ │ │ │ ├── ByteBuddyPageFactory.java │ │ │ │ ├── PageImplementation.java │ │ │ │ └── exceptions │ │ │ │ ├── PageCreationException.java │ │ │ │ └── PageMustBeInterfaceException.java │ │ ├── mapping │ │ │ ├── DefaultMappingValidator.java │ │ │ └── MappingValidator.java │ │ └── postconstruct │ │ │ ├── PostConstructInvocationException.java │ │ │ ├── PostConstructInvoker.java │ │ │ ├── PostConstructMustBeChecker.java │ │ │ └── PostConstructMustBeConditionException.java │ │ ├── markings │ │ └── Marker.java │ │ ├── mouse │ │ ├── DefaultMouseDriver.java │ │ ├── Mouse.java │ │ ├── MouseDriver.java │ │ ├── OnPageFragment.java │ │ ├── Sequence.java │ │ └── SequenceWithFragment.java │ │ ├── pagefragments │ │ ├── Button.java │ │ ├── Checkbox.java │ │ ├── Div.java │ │ ├── EmailField.java │ │ ├── Form.java │ │ ├── GenericElement.java │ │ ├── GenericList.java │ │ ├── GenericSelect.java │ │ ├── GenericTextField.java │ │ ├── Headline.java │ │ ├── IFrame.java │ │ ├── Image.java │ │ ├── Link.java │ │ ├── ListItem.java │ │ ├── MultiSelect.java │ │ ├── NumberField.java │ │ ├── OrderedList.java │ │ ├── PageFragment.java │ │ ├── Paragraph.java │ │ ├── PasswordField.java │ │ ├── RadioButton.java │ │ ├── SearchField.java │ │ ├── SingleSelect.java │ │ ├── Span.java │ │ ├── Table.java │ │ ├── TableField.java │ │ ├── TableRow.java │ │ ├── TelephoneField.java │ │ ├── TextArea.java │ │ ├── TextField.java │ │ ├── UnorderedList.java │ │ ├── UrlField.java │ │ ├── annotations │ │ │ ├── Action.java │ │ │ ├── As.java │ │ │ ├── Attribute.java │ │ │ ├── IdentifyUsing.java │ │ │ ├── Mapping.java │ │ │ ├── Mappings.java │ │ │ ├── Mark.java │ │ │ ├── Named.java │ │ │ ├── PostConstructMustBe.java │ │ │ └── WaitUntil.java │ │ ├── identification │ │ │ ├── ByProducer.java │ │ │ ├── ByProducers.java │ │ │ ├── InvalidByProducerException.java │ │ │ └── producers │ │ │ │ ├── ClassName.java │ │ │ │ ├── CssSelector.java │ │ │ │ ├── CssSelectorUtils.java │ │ │ │ ├── Id.java │ │ │ │ ├── IdEndsWith.java │ │ │ │ ├── IdStartsWith.java │ │ │ │ ├── LinkText.java │ │ │ │ ├── Name.java │ │ │ │ ├── PartialLinkText.java │ │ │ │ ├── TagName.java │ │ │ │ └── XPath.java │ │ ├── mapping │ │ │ ├── MappingException.java │ │ │ ├── Validator.java │ │ │ └── validators │ │ │ │ ├── JustTag.java │ │ │ │ ├── NoOpValidator.java │ │ │ │ ├── TagWithAttribute.java │ │ │ │ ├── TagWithAttributeAndValues.java │ │ │ │ └── TagWithoutAttribute.java │ │ ├── traits │ │ │ ├── Clickable.java │ │ │ └── Selectable.java │ │ └── utils │ │ │ └── EnhancedSelect.java │ │ ├── pages │ │ └── Page.java │ │ └── waiting │ │ ├── ConditionParameterMismatchException.java │ │ ├── ConfiguredWait.java │ │ ├── CurrentThreadSleeper.java │ │ ├── DefaultWaiter.java │ │ ├── InterruptionException.java │ │ ├── Sleeper.java │ │ ├── TimeoutException.java │ │ ├── Wait.java │ │ ├── WaitAction.java │ │ ├── WaitActionFailedException.java │ │ ├── WaitConfig.java │ │ ├── WaitUntil.java │ │ ├── Waiter.java │ │ └── WaitingAction.java │ └── test │ ├── java │ ├── info │ │ └── novatec │ │ │ └── testit │ │ │ └── webtester │ │ │ ├── adhoc │ │ │ ├── AdHocFinderIntTest.java │ │ │ ├── AdHocFinderTest.java │ │ │ ├── ByFinderTest.java │ │ │ └── TypeFinderTest.java │ │ │ ├── browser │ │ │ ├── WebDriverBrowserTest.java │ │ │ ├── factories │ │ │ │ ├── BaseBrowserFactoryTest.java │ │ │ │ ├── RemoteConfigurationBuilderTest.java │ │ │ │ └── RemoteFactoryTest.java │ │ │ ├── operations │ │ │ │ ├── AlertHandlerIntTest.java │ │ │ │ ├── AlertHandlerTest.java │ │ │ │ ├── CurrentWindowIntTest.java │ │ │ │ ├── CurrentWindowTest.java │ │ │ │ ├── FocusSetterTest.java │ │ │ │ ├── JavaScriptExecutorTest.java │ │ │ │ ├── NavigatorTest.java │ │ │ │ ├── PageSourceSaverTest.java │ │ │ │ ├── ScreenshotTakerTest.java │ │ │ │ └── UrlOpenerTest.java │ │ │ └── proxy │ │ │ │ └── NoProxyConfigurationTest.java │ │ │ ├── conditions │ │ │ ├── ConditionTest.java │ │ │ ├── ConditionsTest.java │ │ │ ├── collections │ │ │ │ └── NotEmptyTest.java │ │ │ ├── pagefragments │ │ │ │ ├── AttributeTest.java │ │ │ │ ├── AttributeWithValueTest.java │ │ │ │ ├── DisabledTest.java │ │ │ │ ├── EditableTest.java │ │ │ │ ├── EnabledTest.java │ │ │ │ ├── InteractableTest.java │ │ │ │ ├── InvisibleTest.java │ │ │ │ ├── PresentAndVisibleTest.java │ │ │ │ ├── PresentTest.java │ │ │ │ ├── ReadOnlyIntTest.java │ │ │ │ ├── ReadOnlyTest.java │ │ │ │ ├── SelectedIndexTest.java │ │ │ │ ├── SelectedIndicesTest.java │ │ │ │ ├── SelectedTest.java │ │ │ │ ├── SelectedTextTest.java │ │ │ │ ├── SelectedTextsTest.java │ │ │ │ ├── SelectedValueTest.java │ │ │ │ ├── SelectedValuesTest.java │ │ │ │ ├── VisibleTest.java │ │ │ │ ├── VisibleTextContainsTest.java │ │ │ │ └── VisibleTextEqualsTest.java │ │ │ ├── syntax │ │ │ │ ├── EitherTest.java │ │ │ │ ├── HasTest.java │ │ │ │ ├── IsTest.java │ │ │ │ └── NotTest.java │ │ │ └── values │ │ │ │ └── EqualToTest.java │ │ │ ├── config │ │ │ ├── BaseConfigurationTest.java │ │ │ ├── adapters │ │ │ │ └── ClasspathPropertiesFileConfigurationAdapterTest.java │ │ │ ├── builders │ │ │ │ ├── BaseConfigurationBuilderTest.java │ │ │ │ └── DefaultConfigurationBuilderTest.java │ │ │ └── exporters │ │ │ │ └── SystemPropertyConfigurationExporterTest.java │ │ │ ├── css │ │ │ └── DefaultStyleChangerTest.java │ │ │ ├── events │ │ │ ├── AbstractEventTest.java │ │ │ ├── DispatchingEventSystemTest.java │ │ │ ├── ExceptionEventTest.java │ │ │ ├── browser │ │ │ │ ├── AcceptedAlertEventTest.java │ │ │ │ ├── ClosedBrowserEventTest.java │ │ │ │ ├── ClosedWindowEventTest.java │ │ │ │ ├── DeclinedAlertEventTest.java │ │ │ │ ├── MaximizedWindowEventTest.java │ │ │ │ ├── NavigatedBackwardsEventTest.java │ │ │ │ ├── NavigatedForwardsEventTest.java │ │ │ │ ├── OpenedUrlEventTest.java │ │ │ │ ├── RefreshedPageEventTest.java │ │ │ │ ├── SavedSourceCodeEventTest.java │ │ │ │ ├── SetWindowPositionEventTest.java │ │ │ │ ├── SetWindowSizeEventTest.java │ │ │ │ ├── SwitchedToDefaultContentEventTest.java │ │ │ │ ├── SwitchedToFrameEventTest.java │ │ │ │ ├── SwitchedToWindowEventTest.java │ │ │ │ └── TookScreenshotEventTest.java │ │ │ └── listeners │ │ │ │ └── TakeScreenshotOnExceptionListenerTest.java │ │ │ ├── internal │ │ │ ├── PostConstructInvokerTest.java │ │ │ └── implementation │ │ │ │ ├── invocationhandler │ │ │ │ └── KotlinDefaultMethodHandlerTest.java │ │ │ │ ├── pagefragments │ │ │ │ ├── ByteBuddyPageFragmentFactoryTest.java │ │ │ │ ├── DynamicWebElementSupplierTest.java │ │ │ │ └── StaticWebElementSupplierTest.java │ │ │ │ └── pages │ │ │ │ └── ByteBuddyPageFactoryTest.java │ │ │ ├── markings │ │ │ ├── MarkerIntTest.java │ │ │ └── MarkerTest.java │ │ │ ├── mouse │ │ │ ├── DefaultMouseDriverIntTest.java │ │ │ ├── MouseIntTest.java │ │ │ ├── MouseTest.java │ │ │ ├── OnPageFragmentTest.java │ │ │ ├── SequenceTest.java │ │ │ └── SequenceWithFragmentTest.java │ │ │ ├── pagefragments │ │ │ ├── ButtonIntTest.java │ │ │ ├── CheckboxIntTest.java │ │ │ ├── DivIntTest.java │ │ │ ├── FormIntTest.java │ │ │ ├── GenericElementIntTest.java │ │ │ ├── GenericListIntTest.java │ │ │ ├── HeadlineIntTest.java │ │ │ ├── IFrameIntTest.java │ │ │ ├── ImageIntTest.java │ │ │ ├── LinkIntTest.java │ │ │ ├── ListItemIntTest.java │ │ │ ├── MultiSelectIntTest.java │ │ │ ├── NestedPageFragmentsIntTest.java │ │ │ ├── NumberFieldIntTest.java │ │ │ ├── OrderedListIntTest.java │ │ │ ├── PageFragmentIntTest.java │ │ │ ├── ParagraphIntTest.java │ │ │ ├── PasswordFieldIntTest.java │ │ │ ├── PostConstructIntTest.java │ │ │ ├── RadioButtonIntTest.java │ │ │ ├── SingleSelectIntTest.java │ │ │ ├── SpanIntTest.java │ │ │ ├── TableFieldIntTest.java │ │ │ ├── TableIntTest.java │ │ │ ├── TableRowIntTest.java │ │ │ ├── TextAreaIntTest.java │ │ │ ├── TextFieldIntTest.java │ │ │ ├── UnorderedListIntTest.java │ │ │ ├── annotations │ │ │ │ ├── AttributeIntTest.java │ │ │ │ ├── IdentifyUsingIntTest.java │ │ │ │ ├── NamedIntTest.java │ │ │ │ ├── PostConstructMustBeWithWaitUntilIntTest.java │ │ │ │ ├── PostConstructMustBeWithinPageFragmentsIntTest.java │ │ │ │ ├── PostConstructMustBeWithinPagesIntTest.java │ │ │ │ └── WaitUntilIntTest.java │ │ │ └── identification │ │ │ │ ├── ByProducersTest.java │ │ │ │ ├── IdentificationIntTest.java │ │ │ │ └── producers │ │ │ │ ├── ClassNameTest.java │ │ │ │ ├── CssSelectorTest.java │ │ │ │ ├── CssSelectorUtilsTest.java │ │ │ │ ├── IdEndsWithTest.java │ │ │ │ ├── IdStartsWithTest.java │ │ │ │ ├── IdTest.java │ │ │ │ ├── LinkTextTest.java │ │ │ │ ├── NameTest.java │ │ │ │ ├── PartialLinkTextTest.java │ │ │ │ ├── TagNameTest.java │ │ │ │ └── XPathTest.java │ │ │ ├── pages │ │ │ └── PostConstructIntTest.java │ │ │ └── waiting │ │ │ ├── ConfiguredWaitTest.java │ │ │ ├── DefaultWaiterTest.java │ │ │ ├── WaitConfigTest.java │ │ │ ├── WaitTest.java │ │ │ ├── WaitUntilTest.java │ │ │ └── WaitingActionTest.java │ └── utils │ │ ├── ExceptionThrowingRunnable.java │ │ ├── TestUtils.java │ │ ├── events │ │ ├── EventCaptor.java │ │ ├── ExceptionEventCaptor.java │ │ ├── MultiEventCaptor.java │ │ ├── MultiEventCollectingListener.java │ │ └── SingleEventCollectingListener.java │ │ ├── integration │ │ ├── BaseIntTest.java │ │ └── TestBrowserFactory.java │ │ └── unit │ │ └── MockFactory.java │ └── resources │ ├── configurations │ ├── base_cfg.properties │ ├── classpath-properties-file.properties │ └── test_cfg.properties │ ├── html │ ├── _style.css │ ├── annotations │ │ └── visible.html │ ├── browser │ │ ├── alert.html │ │ ├── empty.html │ │ └── window.html │ ├── conditions │ │ ├── conditions_readonly.html │ │ └── conditions_readonly.xhtml │ ├── empty.html │ ├── features │ │ ├── debug-markings.html │ │ ├── identify-using.html │ │ ├── mouse-utils.html │ │ ├── must-be-with-wait.html │ │ ├── must-be.html │ │ ├── named-page-fragments.html │ │ ├── page-fragment-caching.html │ │ ├── post-construct.html │ │ └── wait-annotation.html │ ├── nested-page-fragments.html │ ├── pagefragments │ │ ├── _frameContent.html │ │ ├── _image.png │ │ ├── _targetPage.html │ │ ├── annotations │ │ │ └── attribute-injection.html │ │ ├── button.html │ │ ├── checkbox.html │ │ ├── div.html │ │ ├── form.html │ │ ├── genericElement.html │ │ ├── genericList.html │ │ ├── headline.html │ │ ├── identification │ │ │ └── by-producers.html │ │ ├── iframe.html │ │ ├── image.html │ │ ├── link.html │ │ ├── listItem.html │ │ ├── multiSelect.html │ │ ├── numberField.html │ │ ├── orderedList.html │ │ ├── pageFragment.html │ │ ├── paragraph.html │ │ ├── passwordField.html │ │ ├── radioButton.html │ │ ├── singleSelect.html │ │ ├── span.html │ │ ├── table.html │ │ ├── tableField.html │ │ ├── tableRow.html │ │ ├── textArea.html │ │ ├── textField.html │ │ └── unorderedList.html │ ├── stale-elements.html │ └── utils │ │ ├── _image.png │ │ ├── ad-hoc-finding.html │ │ └── mouse.html │ ├── logback.xml │ └── testit-webtester.properties ├── webtester-documentation ├── pom.xml └── src │ ├── main │ └── asciidoc │ │ ├── chapters │ │ ├── ad-hoc-finding.asciidoc │ │ ├── annotations-action.asciidoc │ │ ├── annotations-attribute.asciidoc │ │ ├── annotations-identify-using.asciidoc │ │ ├── annotations-mark.asciidoc │ │ ├── annotations-named.asciidoc │ │ ├── annotations-post-construct-must-be.asciidoc │ │ ├── annotations-post-construct.asciidoc │ │ ├── annotations-produces.asciidoc │ │ ├── annotations-wait-until.asciidoc │ │ ├── browser-factories.asciidoc │ │ ├── browser.asciidoc │ │ ├── configuration.asciidoc │ │ ├── dependencies.asciidoc │ │ ├── event-system.asciidoc │ │ ├── kotlin.asciidoc │ │ ├── page-fragments.asciidoc │ │ ├── pages.asciidoc │ │ ├── support-module-assertj3.asciidoc │ │ ├── support-module-hamcrest.asciidoc │ │ ├── support-module-junit4.asciidoc │ │ ├── support-module-junit5.asciidoc │ │ ├── support-module-spring4.asciidoc │ │ ├── utility-by-producers.asciidoc │ │ ├── utility-conditions.asciidoc │ │ ├── utility-mouse.asciidoc │ │ └── utility-waiting.asciidoc │ │ └── documentation.asciidoc │ └── test │ └── java │ └── documentation │ └── DefaultPropertiesDocumentation.java ├── webtester-kotlin ├── pom.xml └── src │ ├── main │ └── kotlin │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── kotlin │ │ ├── pagefragments │ │ └── PageFragment.kt │ │ └── pages │ │ └── Page.kt │ └── test │ ├── kotlin │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── kotlin │ │ ├── KotlinDemo.kt │ │ └── KotlinIntTest.kt │ └── resources │ └── html │ ├── _style.css │ └── testKotlin.html ├── webtester-migration-guide ├── pom.xml └── src │ └── main │ └── asciidoc │ └── migration-guide.asciidoc ├── webtester-support-assertj3 ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── support │ │ └── assertj │ │ ├── WebTesterAssertions.java │ │ └── assertions │ │ ├── AbstractWebTesterAssert.java │ │ └── pagefragments │ │ ├── AbstractPageFragmentAssert.java │ │ ├── ButtonAssert.java │ │ ├── GenericSelectAssert.java │ │ ├── GenericTextFieldAssert.java │ │ ├── MultiSelectAssert.java │ │ ├── PageFragmentAssert.java │ │ ├── SelectableAssert.java │ │ └── SingleSelectAssert.java │ └── test │ ├── java │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── support │ │ └── assertj │ │ └── assertions │ │ ├── AbstractWebTesterAssertTest.java │ │ └── pagefragments │ │ ├── ButtonAssertTest.java │ │ ├── GenericSelectAssertTest.java │ │ ├── GenericTextFieldAssertTest.java │ │ ├── MultiSelectAssertTest.java │ │ ├── PageFragmentAssertTest.java │ │ ├── SelectableAssertTest.java │ │ └── SingleSelectAssertTest.java │ └── resources │ └── logback.xml ├── webtester-support-hamcrest ├── pom.xml └── src │ ├── main │ └── java │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── support │ │ └── hamcrest │ │ ├── WebTesterMatchers.java │ │ └── matchers │ │ ├── HasMatcher.java │ │ └── pagefragments │ │ ├── AttributeMatcher.java │ │ ├── AttributeValueMatcher.java │ │ ├── ButtonLabelMatcher.java │ │ ├── DisabledMatcher.java │ │ ├── EnabledMatcher.java │ │ ├── InvisibleMatcher.java │ │ ├── NoOptionsMatcher.java │ │ ├── NoSelectedOptionsMatcher.java │ │ ├── NumberOfOptionsMatcher.java │ │ ├── NumberOfSelectedOptionsMatcher.java │ │ ├── OptionsMatcher.java │ │ ├── OptionsTextsMatcher.java │ │ ├── OptionsValuesMatcher.java │ │ ├── PresentMatcher.java │ │ ├── SelectedMatcher.java │ │ ├── SelectedOptionsMatcher.java │ │ ├── SelectionIndexMatcher.java │ │ ├── SelectionIndicesMatcher.java │ │ ├── SelectionTextMatcher.java │ │ ├── SelectionTextsMatcher.java │ │ ├── SelectionValueMatcher.java │ │ ├── SelectionValuesMatcher.java │ │ ├── TagMatcher.java │ │ ├── TextContainingMatcher.java │ │ ├── TextMatcher.java │ │ ├── VisibleMatcher.java │ │ ├── VisibleTextContainingMatcher.java │ │ └── VisibleTextMatcher.java │ └── test │ ├── java │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── support │ │ └── hamcrest │ │ └── matchers │ │ └── pagefragments │ │ ├── AttributeMatcherTest.java │ │ ├── AttributeValueMatcherTest.java │ │ ├── ButtonLabelMatcherTest.java │ │ ├── DisabledMatcherTest.java │ │ ├── EnabledMatcherTest.java │ │ ├── InvisibleMatcherTest.java │ │ ├── NoOptionsMatcherTest.java │ │ ├── NoSelectedOptionsMatcherTest.java │ │ ├── NumberOfOptionsMatcherTest.java │ │ ├── NumberOfSelectedOptionsMatcherTest.java │ │ ├── OptionsMatcherTest.java │ │ ├── OptionsTextsMatcherTest.java │ │ ├── OptionsValuesMatcherTest.java │ │ ├── PresentMatcherTest.java │ │ ├── SelectedMatcherTest.java │ │ ├── SelectedOptionsMatcherTest.java │ │ ├── SelectionIndexMatcherTest.java │ │ ├── SelectionIndicesMatcherTest.java │ │ ├── SelectionTextMatcherTest.java │ │ ├── SelectionTextsMatcherTest.java │ │ ├── SelectionValueMatcherTest.java │ │ ├── SelectionValuesMatcherTest.java │ │ ├── TagMatcherTest.java │ │ ├── TextContainingMatcherTest.java │ │ ├── TextMatcherTest.java │ │ ├── VisibleMatcherTest.java │ │ ├── VisibleTextContainingMatcherTest.java │ │ └── VisibleTextMatcherTest.java │ └── resources │ └── logback.xml ├── webtester-support-junit4 ├── pom.xml └── src │ ├── main │ └── java │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── junit │ │ ├── annotations │ │ ├── ConfigurationValue.java │ │ ├── CreateUsing.java │ │ ├── EntryPoint.java │ │ └── Primary.java │ │ ├── exceptions │ │ ├── IllegalTestClassStructureException.java │ │ ├── NoBrowserFactoryProvidedException.java │ │ ├── NoManagedBrowserException.java │ │ ├── NoPrimaryBrowserException.java │ │ ├── NoStaticPrimaryBrowserException.java │ │ ├── NoUniquePrimaryBrowserException.java │ │ ├── NotOfInjectableFieldTypeException.java │ │ └── WebTesterJUnitSupportException.java │ │ ├── runner │ │ ├── WebTesterJUnitRunner.java │ │ └── internal │ │ │ ├── AbstractTestBrowser.java │ │ │ ├── ClassTestBrowser.java │ │ │ ├── ConfigurationValueInjector.java │ │ │ ├── MethodTestBrowser.java │ │ │ └── TestClassPlausibilityChecker.java │ │ └── utils │ │ └── ReflectionUtils.java │ └── test │ ├── java │ ├── info │ │ └── novatec │ │ │ └── testit │ │ │ └── webtester │ │ │ └── junit │ │ │ ├── runner │ │ │ ├── WebTesterJUnitRunnerIntTest.java │ │ │ ├── WebTesterJUnitRunnerTest.java │ │ │ └── internal │ │ │ │ ├── ConfigurationValueInjectorTest.java │ │ │ │ └── TestClassPlausibilityCheckerTest.java │ │ │ └── utils │ │ │ └── ReflectionUtilsTest.java │ └── utils │ │ ├── MockedTestBrowserFactory.java │ │ └── TestBrowserFactory.java │ └── resources │ ├── logback.xml │ └── testit-webtester.properties ├── webtester-support-junit5 ├── pom.xml └── src │ ├── main │ └── java │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── junit5 │ │ ├── EnableWebTesterExtensions.java │ │ ├── WebTesterJUnitSupportException.java │ │ ├── extensions │ │ ├── BaseExtension.java │ │ ├── NoManagedBrowserException.java │ │ ├── NoManagedBrowserForNameException.java │ │ ├── NoTestClassException.java │ │ ├── TestClassFormatException.java │ │ ├── UnknownConfigurationKeyException.java │ │ ├── browsers │ │ │ ├── CreateBrowsersUsing.java │ │ │ ├── CreateUsing.java │ │ │ ├── EntryPoint.java │ │ │ ├── EntryPointExtension.java │ │ │ ├── Managed.java │ │ │ ├── ManagedBrowserExtension.java │ │ │ ├── NoBrowserFactoryException.java │ │ │ └── NonUniqueBrowserNameException.java │ │ ├── configuration │ │ │ ├── ConfigurationValue.java │ │ │ ├── ConfigurationValueExtension.java │ │ │ ├── NoConfigurationUnmarshallerFoundException.java │ │ │ ├── StaticConfigurationValueFieldsNotSupportedException.java │ │ │ ├── UnmarshallerCantHandleTypeException.java │ │ │ └── unmarshaller │ │ │ │ ├── BooleanUnmarshaller.java │ │ │ │ ├── ConfigurationUnmarshaller.java │ │ │ │ ├── DefaultUnmarshaller.java │ │ │ │ ├── DoubleUnmarshaller.java │ │ │ │ ├── FloatUnmarshaller.java │ │ │ │ ├── IntegerUnmarshaller.java │ │ │ │ ├── LongUnmarshaller.java │ │ │ │ └── StringUnmarshaller.java │ │ ├── eventlisteners │ │ │ ├── Registered.java │ │ │ ├── RegisteredEventListenerExtension.java │ │ │ └── StaticEventListenerFieldsNotSupportedException.java │ │ └── pages │ │ │ ├── Initialized.java │ │ │ ├── PageInitializerExtension.java │ │ │ └── StaticPageFieldsNotSupportedException.java │ │ └── internal │ │ ├── DefaultTestClassModelFactory.java │ │ ├── ReflectionUtils.java │ │ ├── TestClassAnalyzer.java │ │ ├── TestClassModel.java │ │ └── TestClassModelFactory.java │ └── test │ ├── java │ ├── info │ │ └── novatec │ │ │ └── testit │ │ │ └── webtester │ │ │ └── junit5 │ │ │ ├── EnableWebTesterExtensionsIntTest.java │ │ │ ├── extensions │ │ │ ├── BaseExtensionTest.java │ │ │ ├── browsers │ │ │ │ ├── EntryPointExtensionIntTest.java │ │ │ │ ├── EntryPointExtensionTest.java │ │ │ │ ├── ManagedBrowserExtensionIntTest.java │ │ │ │ └── ManagedBrowserExtensionTest.java │ │ │ ├── configuration │ │ │ │ ├── ConfigurationValueExtensionIntTest.java │ │ │ │ ├── ConfigurationValueExtensionTest.java │ │ │ │ └── unmarshaller │ │ │ │ │ ├── BooleanUnmarshallerTest.java │ │ │ │ │ ├── DefaultUnmarshallerTest.java │ │ │ │ │ ├── DoubleUnmarshallerTest.java │ │ │ │ │ ├── FloatUnmarshallerTest.java │ │ │ │ │ ├── IntegerUnmarshallerTest.java │ │ │ │ │ ├── LongUnmarshallerTest.java │ │ │ │ │ └── StringUnmarshallerTest.java │ │ │ ├── eventlisteners │ │ │ │ ├── CustomEventListener.java │ │ │ │ ├── RegisteredEventListenerExtensionIntTest.java │ │ │ │ └── RegisteredEventListenerExtensionTest.java │ │ │ └── pages │ │ │ │ ├── PageInitializerExtensionIntTest.java │ │ │ │ └── PageInitializerExtensionTest.java │ │ │ └── internal │ │ │ ├── ReflectionUtilsTest.java │ │ │ └── TestClassModelTest.java │ └── utils │ │ ├── SpyableEventsTestBrowserFactory.java │ │ ├── TestBrowserFactory.java │ │ └── TestClassExecutor.java │ └── resources │ ├── logback.xml │ └── testit-webtester.properties ├── webtester-support-spring4 ├── pom.xml └── src │ ├── main │ └── java │ │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── spring4 │ │ └── config │ │ ├── ConfigurationBuilderFactoryBean.java │ │ ├── DefaultSpringConfigurationFactoryBean.java │ │ ├── PrototypeConfigurationBuilderFactoryBean.java │ │ └── adapters │ │ └── SpringEnvironmentConfigurationAdapter.java │ └── test │ ├── java │ └── info │ │ └── novatec │ │ └── testit │ │ └── webtester │ │ └── spring4 │ │ └── config │ │ ├── AdapterIntTest.java │ │ ├── ConfigurationBuilderFactoryBeanTest.java │ │ ├── PrototypeConfigurationBuilderFactoryBeanTest.java │ │ └── adapters │ │ └── SpringEnvironmentConfigurationAdapterTest.java │ └── resources │ ├── banner.txt │ ├── logback.xml │ ├── spring-environment.properties │ └── testit-webtester.properties └── webtester-support-spring5 ├── pom.xml └── src ├── main └── java │ └── info │ └── novatec │ └── testit │ └── webtester │ └── spring5 │ └── config │ ├── ConfigurationBuilderFactoryBean.java │ ├── DefaultSpringConfigurationFactoryBean.java │ ├── PrototypeConfigurationBuilderFactoryBean.java │ └── adapters │ └── SpringEnvironmentConfigurationAdapter.java └── test ├── java └── info │ └── novatec │ └── testit │ └── webtester │ └── spring5 │ └── config │ ├── AdapterIntTest.java │ ├── ConfigurationBuilderFactoryBeanTest.java │ ├── PrototypeConfigurationBuilderFactoryBeanTest.java │ └── adapters │ └── SpringEnvironmentConfigurationAdapterTest.java └── resources ├── banner.txt ├── logback.xml ├── spring-environment.properties └── testit-webtester.properties /.gitignore: -------------------------------------------------------------------------------- 1 | !.gitignore 2 | .project 3 | .classpath 4 | .eclipse-pmd 5 | .idea/ 6 | *.iml 7 | **/.settings/ 8 | **/.metadata/ 9 | **/target/ 10 | target 11 | /chromedriver 12 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | testIT - WebTester 2 | Copyright 2013 NovaTec Consulting GmbH 3 | 4 | This product includes software developed at 5 | NovaTec Consulting GmbH (http://www.novatec-gmbh.de/). 6 | 7 | This product is licensed to you under the Apache License, Version 2.0 8 | (the "License"). You may not use this product except in compliance with 9 | the License. 10 | 11 | This product may include a number of subcomponents with separate 12 | copyright notices and license terms. Your use of the source code for 13 | these subcomponents is subject to the terms and conditions of the 14 | subcomponent's license, as noted in the LICENSE file. 15 | -------------------------------------------------------------------------------- /development/intellij-formatter-settings.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/testIT-WebTester/webtester2-core/6aa1ca3167ccda63d1949bbcc9e5164aa6253ced/development/intellij-formatter-settings.jar -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | hub: 2 | image: selenium/hub:3.14 3 | ports: 4 | - "4444:4444" 5 | firefox: 6 | image: selenium/node-firefox:3.14 7 | links: 8 | - hub 9 | additionalFirefox: 10 | image: selenium/node-firefox:3.14 11 | links: 12 | - hub 13 | chrome: 14 | image: selenium/node-chrome:3.14 15 | links: 16 | - hub 17 | additionalChrome: 18 | image: selenium/node-chrome:3.14 19 | links: 20 | - hub 21 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/testIT-WebTester/webtester2-core/6aa1ca3167ccda63d1949bbcc9e5164aa6253ced/logo.png -------------------------------------------------------------------------------- /webtester-core/src/main/java/info/novatec/testit/webtester/WebTesterException.java: -------------------------------------------------------------------------------- 1 | package info.novatec.testit.webtester; 2 | 3 | /** 4 | * Base exception type for all exceptions directly thrown by WebTester. 5 | * 6 | * @since 2.0 7 | */ 8 | @SuppressWarnings("serial") 9 | public class WebTesterException extends RuntimeException { 10 | 11 | protected WebTesterException(String message) { 12 | super(message); 13 | } 14 | 15 | protected WebTesterException(String message, Throwable cause) { 16 | super(message, cause); 17 | } 18 | 19 | protected WebTesterException(Throwable cause) { 20 | super(cause); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /webtester-core/src/main/java/info/novatec/testit/webtester/browser/operations/BaseBrowserOperation.java: -------------------------------------------------------------------------------- 1 | package info.novatec.testit.webtester.browser.operations; 2 | 3 | import org.openqa.selenium.WebDriver; 4 | 5 | import lombok.NonNull; 6 | import lombok.RequiredArgsConstructor; 7 | 8 | import info.novatec.testit.webtester.browser.Browser; 9 | import info.novatec.testit.webtester.config.Configuration; 10 | import info.novatec.testit.webtester.events.EventSystem; 11 | 12 | @RequiredArgsConstructor 13 | class BaseBrowserOperation { 14 | 15 | @NonNull 16 | private final Browser browser; 17 | 18 | Browser browser() { 19 | return browser; 20 | } 21 | 22 | Configuration configuration() { 23 | return browser.configuration(); 24 | } 25 | 26 | WebDriver webDriver() { 27 | return browser.webDriver(); 28 | } 29 | 30 | EventSystem events() { 31 | return browser().events(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /webtester-core/src/main/java/info/novatec/testit/webtester/browser/proxy/NoProxyConfiguration.java: -------------------------------------------------------------------------------- 1 | package info.novatec.testit.webtester.browser.proxy; 2 | 3 | import org.openqa.selenium.Proxy; 4 | 5 | import info.novatec.testit.webtester.browser.BrowserFactory; 6 | 7 | 8 | /** 9 | * Default implementation of a {@link ProxyConfiguration proxy configuration} 10 | * doing nothing to with {@link Proxy proxy} object. 11 | * 12 | * @see Proxy 13 | * @see ProxyConfiguration 14 | * @see BrowserFactory 15 | * @since 2.0 16 | */ 17 | public class NoProxyConfiguration implements ProxyConfiguration { 18 | 19 | @Override 20 | public void configureProxy(Proxy proxy) { 21 | // do nothing 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /webtester-core/src/main/java/info/novatec/testit/webtester/browser/proxy/ProxyConfiguration.java: -------------------------------------------------------------------------------- 1 | package info.novatec.testit.webtester.browser.proxy; 2 | 3 | import org.openqa.selenium.Proxy; 4 | 5 | import info.novatec.testit.webtester.browser.BrowserFactory; 6 | 7 | 8 | /** 9 | * Classes implementing this interface are used to configure a {@link Proxy 10 | * proxy}. They can be provided when initializing a browser via a 11 | * {@link BrowserFactory factory}. 12 | * 13 | * @see Proxy 14 | * @see BrowserFactory 15 | * @see NoProxyConfiguration 16 | * @since 2.0 17 | */ 18 | public interface ProxyConfiguration { 19 | 20 | /** 21 | * This is called after the {@link Proxy proxy} object was initialized by 22 | * the framework. The given proxy should be configured as needed. 23 | * 24 | * @param proxy the proxy object to configure 25 | * @since 2.0 26 | */ 27 | void configureProxy(Proxy proxy); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /webtester-core/src/main/java/info/novatec/testit/webtester/conditions/Condition.java: -------------------------------------------------------------------------------- 1 | package info.novatec.testit.webtester.conditions; 2 | 3 | import java.util.function.Predicate; 4 | 5 | 6 | /** 7 | * A condition is a special form of {@link Predicate}. 8 | *
9 | * It is used in WebTester's API in order to allow for the extension with additional features in the future.
10 | *
11 | * @param
13 | * Example:
13 | * Example:
13 | * Example:
12 | * Example:
8 | * This process allows for custom property sources (other then the defaults used by the framework) to be included in the
9 | * configuration of the framework.
10 | *
11 | * @see Configuration
12 | * @see ConfigurationBuilder
13 | * @since 2.0
14 | */
15 | public interface ConfigurationAdapter {
16 |
17 | /**
18 | * Adapts the given {@link Configuration configuration} by changing properties (named an unnamed) as needed.
19 | *
20 | * @param configuration the configuration to adapt
21 | * @return true if adaptation was executed, otherwise false
22 | * @since 2.0
23 | */
24 | boolean adapt(Configuration configuration);
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/config/ConfigurationException.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.config;
2 |
3 | import info.novatec.testit.webtester.WebTesterException;
4 |
5 |
6 | @SuppressWarnings("serial")
7 | public class ConfigurationException extends WebTesterException {
8 |
9 | protected ConfigurationException(String message) {
10 | super(message);
11 | }
12 |
13 | protected ConfigurationException(String message, Throwable cause) {
14 | super(message, cause);
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/config/adapters/GlobalFileConfigurationAdapter.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.config.adapters;
2 |
3 | import info.novatec.testit.webtester.config.Configuration;
4 | import info.novatec.testit.webtester.config.ConfigurationAdapter;
5 |
6 |
7 | /**
8 | * Loads a file called
12 | * This file should be used to define common properties in an environment where multiple test projects are using a common
13 | * base.
14 | *
15 | * @see ConfigurationAdapter
16 | * @see ClasspathPropertiesFileConfigurationAdapter
17 | * @since 2.0
18 | */
19 | public class GlobalFileConfigurationAdapter extends ClasspathPropertiesFileConfigurationAdapter {
20 |
21 | private static final String PROPERTIES_FILE = "testit-webtester-global.properties";
22 |
23 | public GlobalFileConfigurationAdapter() {
24 | super(PROPERTIES_FILE, Importance.OPTIONAL);
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/config/adapters/LocalFileConfigurationAdapter.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.config.adapters;
2 |
3 | import info.novatec.testit.webtester.config.Configuration;
4 | import info.novatec.testit.webtester.config.ConfigurationAdapter;
5 |
6 |
7 | /**
8 | * Loads a file called
12 | * This file should be used to define properties for the current test project.
13 | *
14 | * @see ConfigurationAdapter
15 | * @see ClasspathPropertiesFileConfigurationAdapter
16 | * @since 2.0
17 | */
18 | public class LocalFileConfigurationAdapter extends ClasspathPropertiesFileConfigurationAdapter {
19 |
20 | private static final String PROPERTIES_FILE = "testit-webtester.properties";
21 |
22 | public LocalFileConfigurationAdapter() {
23 | super(PROPERTIES_FILE, Importance.RECOMMENDED);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/config/exceptions/InvalidValueTypeException.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.config.exceptions;
2 |
3 | import java.util.Collection;
4 |
5 | import org.apache.commons.lang.StringUtils;
6 |
7 | import info.novatec.testit.webtester.config.ConfigurationException;
8 |
9 |
10 | @SuppressWarnings("serial")
11 | public class InvalidValueTypeException extends ConfigurationException {
12 |
13 | public InvalidValueTypeException(Class> type, Collection
8 | * It stores the event's creation timestamp as a property.
9 | *
10 | * @see Event
11 | * @see EventListener
12 | * @see EventSystem
13 | * @since 2.0
14 | */
15 | public abstract class AbstractEvent implements Event {
16 |
17 | private final LocalDateTime timestamp = LocalDateTime.now();
18 |
19 | @Override
20 | public LocalDateTime getTimestamp() {
21 | return timestamp;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/Event.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events;
2 |
3 | import java.time.LocalDateTime;
4 |
5 |
6 | /**
7 | * Represents an event in the framework. An event can be something simple as clicking a button or something as complex as
8 | * taking a screenshot.
9 | *
10 | * Events usually contain information about what happened to prompt the firing of the event.
11 | * I.e. this could be the text before and after for a text set event.
12 | *
13 | * @see EventListener
14 | * @see DispatchingEventSystem
15 | * @since 2.0
16 | */
17 | public interface Event {
18 |
19 | /**
20 | * The exact point in time the event occurred.
21 | *
22 | * @return the timestamp
23 | * @see LocalDateTime
24 | * @since 2.0
25 | */
26 | LocalDateTime getTimestamp();
27 |
28 | /**
29 | * A textual description of the event. Intended to be understandable to humans.
30 | *
31 | * @return the event description
32 | * @since 2.0
33 | */
34 | String describe();
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/EventListener.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events;
2 |
3 | /**
4 | * Defines a listener that can be registered at the {@link DispatchingEventSystem event system}.
5 | *
6 | * If an {@link Event event} is reported by the system the {@link #eventOccurred(Event)} method of all registered
7 | * listeners is invoked.
8 | *
9 | * @see Event
10 | * @see DispatchingEventSystem
11 | * @since 2.0
12 | */
13 | public interface EventListener {
14 |
15 | /**
16 | * This method will be called if any {@link Event event} is reported by the {@link DispatchingEventSystem event system}.
17 | *
18 | * @param event the {@link Event event} that occurred.
19 | * @see Event
20 | * @see DispatchingEventSystem
21 | * @since 2.0
22 | */
23 | void eventOccurred(Event event);
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/ExceptionEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 | import lombok.NonNull;
6 |
7 |
8 | /**
9 | * This event is thrown whenever an exception inside the framework occurred.
10 | * It contains the exception as a property.
11 | *
12 | * This event should only be fired using {@link EventSystem#fireExceptionEvent(Throwable)}.
13 | * If it is fired using {@link EventSystem#fireEvent(Event)} it might be ignored in case the event system is not enabled.
14 | *
15 | * @see Event
16 | * @see EventListener
17 | * @see EventSystem
18 | * @since 2.0
19 | */
20 | @Getter
21 | @AllArgsConstructor
22 | public class ExceptionEvent extends AbstractEvent {
23 |
24 | @NonNull
25 | private final Throwable exception;
26 |
27 | @Override
28 | public String describe() {
29 | return "exception occurred: '" + exception.getMessage() + "'";
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/ClosedBrowserEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.Browser;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a browser was closed.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see Browser#close()
17 | * @since 2.0
18 | */
19 | @SuppressWarnings("serial")
20 | public class ClosedBrowserEvent extends AbstractEvent {
21 |
22 | @Override
23 | public String describe() {
24 | return "closed browser";
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/ClosedWindowEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.operations.CurrentWindow;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a window was closed.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see CurrentWindow#close()
17 | * @since 2.0
18 | */
19 | @SuppressWarnings("serial")
20 | public class ClosedWindowEvent extends AbstractEvent {
21 |
22 | @Override
23 | public String describe() {
24 | return "closed window";
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/MaximizedWindowEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.operations.CurrentWindow;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a window was maximized.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see CurrentWindow#maximize()
17 | * @since 2.0
18 | */
19 | @SuppressWarnings("serial")
20 | public class MaximizedWindowEvent extends AbstractEvent {
21 |
22 | @Override
23 | public String describe() {
24 | return "maximized window";
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/NavigatedBackwardsEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.operations.Navigator;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a navigate backwards was executed.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see Navigator#backwards()
17 | * @see Navigator#backwards(int)
18 | * @since 2.0
19 | */
20 | @SuppressWarnings("serial")
21 | public class NavigatedBackwardsEvent extends AbstractEvent {
22 |
23 | @Override
24 | public String describe() {
25 | return "navigated back in the browser history";
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/NavigatedForwardsEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.operations.Navigator;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a navigate forward was executed.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see Navigator#forwards()
17 | * @see Navigator#forwards(int)
18 | * @since 2.0
19 | */
20 | @SuppressWarnings("serial")
21 | public class NavigatedForwardsEvent extends AbstractEvent {
22 |
23 | @Override
24 | public String describe() {
25 | return "navigated forward in the browser history";
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/RefreshedPageEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.operations.CurrentWindow;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a page was refreshed.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see CurrentWindow#refresh()
17 | * @since 2.0
18 | */
19 | @SuppressWarnings("serial")
20 | public class RefreshedPageEvent extends AbstractEvent {
21 |
22 | @Override
23 | public String describe() {
24 | return "refreshed the page";
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/SetWindowPositionEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | import info.novatec.testit.webtester.browser.operations.CurrentWindow;
7 | import info.novatec.testit.webtester.events.AbstractEvent;
8 | import info.novatec.testit.webtester.events.Event;
9 | import info.novatec.testit.webtester.events.EventListener;
10 | import info.novatec.testit.webtester.events.EventSystem;
11 |
12 |
13 | /**
14 | * This {@link Event event} occurs whenever the position of a window was set.
15 | *
16 | * @see Event
17 | * @see EventListener
18 | * @see EventSystem
19 | * @see CurrentWindow#setPosition(int, int)
20 | * @since 2.0
21 | */
22 | @Getter
23 | @AllArgsConstructor
24 | @SuppressWarnings("serial")
25 | public class SetWindowPositionEvent extends AbstractEvent {
26 |
27 | private final int x;
28 | private final int y;
29 |
30 | @Override
31 | public String describe() {
32 | return "set window position: x=" + x + ", y=" + y;
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/SetWindowSizeEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import lombok.Getter;
4 |
5 | import info.novatec.testit.webtester.browser.operations.CurrentWindow;
6 | import info.novatec.testit.webtester.events.AbstractEvent;
7 | import info.novatec.testit.webtester.events.Event;
8 | import info.novatec.testit.webtester.events.EventListener;
9 | import info.novatec.testit.webtester.events.EventSystem;
10 |
11 |
12 | /**
13 | * This {@link Event event} occurs whenever the size of a window was set.
14 | *
15 | * @see Event
16 | * @see EventListener
17 | * @see EventSystem
18 | * @see CurrentWindow#setSize(int, int)
19 | * @since 2.0
20 | */
21 | @Getter
22 | @SuppressWarnings("serial")
23 | public class SetWindowSizeEvent extends AbstractEvent {
24 |
25 | private final int width;
26 | private final int height;
27 |
28 | public SetWindowSizeEvent(int width, int height) {
29 | this.width = width;
30 | this.height = height;
31 | }
32 |
33 | @Override
34 | public String describe() {
35 | return "set window size: width=" + width + ", height=" + height;
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/browser/SwitchedToDefaultContentEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.browser;
2 |
3 | import info.novatec.testit.webtester.browser.operations.FocusSetter;
4 | import info.novatec.testit.webtester.events.AbstractEvent;
5 | import info.novatec.testit.webtester.events.Event;
6 | import info.novatec.testit.webtester.events.EventListener;
7 | import info.novatec.testit.webtester.events.EventSystem;
8 |
9 |
10 | /**
11 | * This {@link Event event} occurs whenever a switch to the default content occurred.
12 | *
13 | * @see Event
14 | * @see EventListener
15 | * @see EventSystem
16 | * @see FocusSetter#onDefaultContent()
17 | * @since 2.0
18 | */
19 | @SuppressWarnings("serial")
20 | public class SwitchedToDefaultContentEvent extends AbstractEvent {
21 |
22 | @Override
23 | public String describe() {
24 | return "switched to default content";
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/webtester-core/src/main/java/info/novatec/testit/webtester/events/pagefragments/EnterPressedEvent.java:
--------------------------------------------------------------------------------
1 | package info.novatec.testit.webtester.events.pagefragments;
2 |
3 | import info.novatec.testit.webtester.events.Event;
4 | import info.novatec.testit.webtester.events.EventListener;
5 | import info.novatec.testit.webtester.events.EventSystem;
6 | import info.novatec.testit.webtester.pagefragments.PageFragment;
7 |
8 |
9 | /**
10 | * This {@link Event event} occurs whenever ENTER is pressed.
11 | *
12 | * @see Event
13 | * @see EventListener
14 | * @see EventSystem
15 | * @since 2.0
16 | */
17 | public class EnterPressedEvent extends AbstractPageFragmentEvent {
18 |
19 | public EnterPressedEvent(PageFragment fragment) {
20 | super(fragment);
21 | }
22 |
23 | @Override
24 | public String describe() {
25 | return "pressed ENTER on: " + getPageFragmentName();
26 | }
27 |
28 | public static class Builder extends AbstractPageFragmentEventBuilderWaits.waitUntil(textfield, has(text("foo")));
is
14 | * more readable then Waits.waitUntil(textfield, text("foo"));
15 | *
16 | * @param Waits.waitUntil(checkbox, is(selected()));
is
14 | * more readable then Waits.waitUntil(checkbox, selected());
15 | *
16 | * @param Waits.waitUntil(checkbox, is(not(selected())));
14 | *
15 | * @param Wait.untilSupplied(textField::getText).is(equalTo("foo"));
13 | *
14 | * @param testit-webtester-global.properties
from the classpath's root level in order to {@link
9 | * ConfigurationAdapter adapt} {@link Configuration configurations}. If the file doesn't exist the adaptation will be
10 | * canceled and a warning will be logged.
11 | * testit-webtester.properties
from the classpath's root level in order to {@link
9 | * ConfigurationAdapter adapt} {@link Configuration configurations}. If the file doesn't exist the adaptation will be
10 | * canceled and a warning will be logged.
11 | * src
attribute's value as an optional string.
14 | *
15 | * @return the optional value of the src
attribute
16 | * @see Attribute
17 | * @see Optional
18 | * @since 2.0
19 | */
20 | @Attribute("src")
21 | Optionalhref
attribute's value as an optional string.
15 | *
16 | * @return the optional value of the href
attribute
17 | * @see Attribute
18 | * @see Optional
19 | * @since 2.0
20 | */
21 | @Attribute("href")
22 | Optionaltarget
attribute's value as an optional string.
26 | *
27 | * @return the optional value of the target
attribute
28 | * @see Attribute
29 | * @see Optional
30 | * @since 2.0
31 | */
32 | @Attribute("target")
33 | Optional