Layout and functional testing framework for websites

Overview

Galen Framework

master: Build Status

Galen is an open-source tool for testing layout and responsive design of web applications. It is also a powerfull functional testing framework. For more information visit http://galenframework.com

How does it work?

Galen Framework uses Selenium in order to open web browser and select the tested elements on page. It has a special language to describe the layout of web page for different browser sizes. You just need to define your own tags for devices and sizes and then using the galen spec language write checks for each element on page. The best way to test the layout is to check location and dimensions of elements relatively to each other. Here is a small example of basic syntax.

@objects
    header                  id  header
    menu                    css #menu
    content                 id  content
    side-panel              id  side-panel
    footer                  id  footer

= Main section =
    @on *
        header:
            inside screen 0px top, 0px left, 0px right

        menu:
            inside screen 0px left right
            below header 0px

        content:
            below menu 0px
            inside screen 0px left

    @on desktop
        side-panel:
            below menu 0px
            inside screen 0px right
            width 300px
            near content 0px right

    @on mobile
        content, side-panel:
            width 100% of screen/width

        side-panel:
            below content 0px

And here is a more advanced spec:

# example of using custom rules (functions)

@set userMargin 5 to 10 px

@objects
    user-*      div.users-list .user

@rule %{pattern} are below each other by %{distance} and aligned
    @forEach [pattern] as object, prev as prevObject
        ${object}:
            below ${prevObject} ${distance}
            aligned vertically all ${prevObject}

= Checking all users =
    | user-* are below each other by ${userMargin} and aligned

Conditional statements:

@objects
    banner-container    #banner-container

= Banner section =
    @if ${isVisible("banner-container")}
        banner-container:
            image file imgs/banner.png, error 5%

For more information please read Galen Framework Documentation

Contributing

If you want to contribute to this project just look for current open issues. Please let know in the comments of the issue that you are going to pick it up because somebody could already work on it. In the end just send the pull request. By the way the feature that you are going to work on should not just solve your particular problem. It should be extendable and configurable. The github issues is the best place to debate on the feature and discuss how it should be implemented.

All the work on the next version is performed in corresponding release branch (e.g. release-2.5). The master branch reflects the current live version. Most of the pull requests are accepted on release branch and not on master.

If you would like to make a change to the Galen Framework website (http://galenframework.com) you can do it here https://github.com/galenframework/galenframework.com

Add GPG key to your maven settings.xml:

      <properties>
          <gpg.keyname>C78F3CC4</gpg.keyname>
          <gpg.passphrase>Password</gpg.passphrase>
          ...

Setup the dependencies mvn clean install

The test can be run via mvn verify

To run integrations tests against chrome:

mvn clean verify -Dwebdriver.chrome.driver=/opt/dev/chromedriver -Dselenium.browser=chrome

Please ensure that you downloaded chromedriver, see here

Also you need Maven 3.3 or greater and Node with some modules:

  • sudo npm install -g grunt-cli
  • sudo npm install -g bower

Building

This project is based on Maven. You can use both Intellij or Eclipse for it. It is being developed in Linux so all the assembling scripts are in bash. In order to assemble the dist with zip archives just run ./makeDist.sh and it will create a dist folder with both binary and source folders and it will prepare zip archives there as well. If you want to quickly test the concept and install galen right after the assembling you can use script ./assembleAndInstall.sh. It uses makeDist.sh and then just invokes sudo ./install.sh

Testing

There are two levels of testing. The first one is just the regular mvn clean test. But as there is a lot of Javascript code - you need Mocha. The tests are located in folder src/test/js/. To run the just go to that folder and execute testJs.sh

License

Galen Framework is licensed under Apache License, Version 2.0

Comments
  • Wrong highlighting area in galen report if test launched on device with 1">

    Wrong highlighting area in galen report if test launched on device with "device pixel ratio" > 1

    If a galen test is launched on real android device with "device pixel ratio" > 1 (e.g. Nexus 5 where devicePixelRatio = 3) highlighting areas in report don't match locations of appropriate elements on screenshot. image We are using Galen java API. Would you please provide a possibility to preset device pixel ratio manually in code (for example via webdriver capabilities) which value will be as multiplier of coordinates of elements.

    bug p1 c2 ready for test 
    opened by kmamaev 35
  • For mobile resolutions, scrollbar need to be removed when page opens up while execution

    For mobile resolutions, scrollbar need to be removed when page opens up while execution

    For mobile resolutions, scroll bar on right side of window need to be removed when page opens up while execution. scroll bar consumes almost 17 px of page and so the content of webpage behaves differently when same page is viewed using Ctrl+Shft+M

    enhancement p3 c3 ready for test 
    opened by sanjumk 22
  • Parallel Tests with jUnit

    Parallel Tests with jUnit

    Hi, we are trying to run our galen-tests parallel with jUnit and the maven-surefire-plugin. (parallel=methods, threadCount=4, same with forkCount=4 und reuseForks=true) currently following error occurrs:

    [ERROR] org.apache.maven.surefire.testset.TestSetFailedException: java.lang.RuntimeException: java.lang.NullPointerException; nested exception is java.lang.RuntimeException: java.lang.NullPointerException
    [ERROR] java.lang.RuntimeException: java.lang.NullPointerException
    [ERROR] at com.galenframework.junit.JUnitStepListener.testRunFinished(JUnitStepListener.java:51)
    [ERROR] at org.junit.runner.notification.RunNotifier$2.notifyListener(RunNotifier.java:95)
    [ERROR] at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:61)
    [ERROR] at org.junit.runner.notification.RunNotifier.fireTestRunFinished(RunNotifier.java:92)
    [ERROR] at org.junit.runner.JUnitCore.run(JUnitCore.java:161)
    [ERROR] at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
    [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:141)
    [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:114)
    [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:86)
    [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:134)
    [ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    [ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    [ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
    [ERROR] Caused by: java.lang.NullPointerException
    [ERROR] at java.util.LinkedList$ListItr.next(LinkedList.java:893)
    [ERROR] at com.galenframework.reports.json.JsonReportBuilder.createReportOverview(JsonReportBuilder.java:70)
    [ERROR] at com.galenframework.reports.HtmlReportBuilder.build(HtmlReportBuilder.java:44)
    [ERROR] at com.galenframework.junit.JUnitStepListener.testRunFinished(JUnitStepListener.java:48)
    

    i also tried to setup the project from base with galen_samples - but after adding our Testcases it also fails.

    maybe you know a solution, or does it currently not work? cli-usage with node have a param "--parallel-tests 8" - maybe there is also parallel-tests for java and i haven´t found it?

    Update: found the difference, i´ve updated to the actual galen version, in the galen_samples is 2.2.4 - in this version it works, in the current not :(

    opened by chrishelgert 21
  • Galen with JUnit on Jenkins

    Galen with JUnit on Jenkins

    java version: 1.8.0.51 galen version: 2.3.0 used browser: Chrome

    we are running our galen-tests via GalenJUnitTestBase and running them with surefire:test (mvn 3.3.3, surefire 2.19.1).

    on the lokal machine (win10) everything works as expected. on the jenkins all tests are running without a problem

    Results :

    Tests run: 16, Failures: 0, Errors: 0, Skipped: 0

    but when the reporter try to generate the report follow error occurs:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-cli) on project common: Exception in provider: java.lang.RuntimeException: java.io.IOException: Directory 'target/galen-html-reports' could not be created.

    if we look at the target-folder then there is already a galen-html-reports-folder: drwxr-xr-x 2 jenkins jenkins 4096 21. Sep 08:17 galen-html-reports

    any suggestions?

    opened by chrishelgert 17
  • File Syntax Exception in Galen 2.0.10

    File Syntax Exception in Galen 2.0.10

    Hi,

    High Priority issue as we have been completely blocked from executing test scripts after installing latest galen

    OS = Mac Yosemite FF = 35, 38, 41

    Spec file we are using :

    @objects buyingInfoTab div[data-tab="buy"]

    = Main Section = buyingInfoTab: width 227 to 232 px height 52 to 57 px

    We have installed Latest Galen 2.0.10. However we are getting the FileSyntax Exception

    Note that we tried both spaces and tabs with the new syntax.

    Note : We are using Open VPN to access our websites.

    Also error messages we have got is as below

    net.mindengine.galen.parser.FileSyntaxException: There is no object defined in section in chimera-homepage.spec:2 at net.mindengine.galen.specs.reader.page.PageSpecReader.read(PageSpecReader.java:116) at net.mindengine.galen.specs.reader.page.PageSpecReader.read(PageSpecReader.java:90) at net.mindengine.galen.api.Galen.checkLayout(Galen.java:50) at net.mindengine.galen.suite.actions.GalenPageActionCheck.execute(GalenPageActionCheck.java:46) at net.mindengine.galen.runner.GalenPageRunner.executeAction(GalenPageRunner.java:77) at net.mindengine.galen.runner.GalenPageRunner.run(GalenPageRunner.java:69) at net.mindengine.galen.runner.GalenBasicTestRunner.runTest(GalenBasicTestRunner.java:66) at net.mindengine.galen.tests.GalenBasicTest.execute(GalenBasicTest.java:52) at net.mindengine.galen.GalenMain$1.run(GalenMain.java:349) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: net.mindengine.galen.parser.SyntaxException: There is no object defined in section at net.mindengine.galen.specs.reader.page.StateDoingSection.processSpecForSimpleObject(StateDoingSection.java:108) at net.mindengine.galen.specs.reader.page.StateDoingSection.process(StateDoingSection.java:90) at net.mindengine.galen.specs.reader.page.PageSpecLineProcessor.processLine(PageSpecLineProcessor.java:85) at net.mindengine.galen.specs.reader.page.PageSpecReader.read(PageSpecReader.java:110) ... 11 more

    Sachin Kodagali [8:51 PM] check chimera-homepage.spec --url http://chimera-1.qe2.us-east-1.hubzu.com/chimera/ --size 1440x990 --htmlreport . net.mindengine.galen.parser.FileSyntaxException: Incorrect indentation. Should not use tabs. Use spaces in chimera-homepage.spec:2 at net.mindengine.galen.specs.reader.page.PageSpecReader.read(PageSpecReader.java:116) at net.mindengine.galen.specs.reader.page.PageSpecReader.read(PageSpecReader.java:90) at net.mindengine.galen.api.Galen.checkLayout(Galen.java:50) at net.mindengine.galen.suite.actions.GalenPageActionCheck.execute(GalenPageActionCheck.java:46) at net.mindengine.galen.runner.GalenPageRunner.executeAction(GalenPageRunner.java:77) at net.mindengine.galen.runner.GalenPageRunner.run(GalenPageRunner.java:69) at net.mindengine.galen.runner.GalenBasicTestRunner.runTest(GalenBasicTestRunner.java:66) at net.mindengine.galen.tests.GalenBasicTest.execute(GalenBasicTest.java:52) at net.mindengine.galen.GalenMain$1.run(GalenMain.java:349) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: net.mindengine.galen.parser.SyntaxException: Incorrect indentation. Should not use tabs. Use spaces at net.mindengine.galen.specs.reader.page.StateDoingSection.startsWithIndentation(StateDoingSection.java:154) at net.mindengine.galen.specs.reader.page.StateDoingSection.process(StateDoingSection.java:85) at net.mindengine.galen.specs.reader.page.PageSpecLineProcessor.processLine(PageSpecLineProcessor.java:85) at net.mindengine.galen.specs.reader.page.PageSpecReader.read(PageSpecReader.java:110) ... 11 more

    opened by sachinkodagali 17
  • Firefox 47 doesn't work with Galen Framework 2.2.5

    Firefox 47 doesn't work with Galen Framework 2.2.5

    After automated update of Firefox to 47.0 Galen tests don't run anymore. The problem seems to be a known issue with selenium not working with Firefox 47 in conjunction with extension signing feature. See: (https://github.com/seleniumhq/selenium/issues/2110).

    This issue contains the advise to use Marionette as the only FirefoxDriver which will be supported in future (https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver).

    There are many more recent issues relating to the same problem with selenium.

    OS: OS X El Capitan 10.11.5 java version: 1.8.0_74 galen version: 2.2.5 used browser and version: Firefox 47.0

    steps leading to the issue: Start test using a firefox driver, e.g.: createDriver("http://localhost:3000", "1280x800", "firefox");

    error log: Fatal error: Command failed: galen test tests/galen.test.js --htmlreport galen-report org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host localhost on port 7055 after 45000 ms. Firefox console output: 8-4474-a285-3208198ce6fd}","syncGUID":"0wvGOi5CNeUM","location":"app-global","version":"47.0","type":"theme","internalName":"classic/1.0","updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"icons":{"32":"icon.png","48":"icon.png"},"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Default","description":"The default theme.","creator":"Mozilla","homepageURL":null,"contributors":["Mozilla Contributors"]},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"descriptor":"/Applications/Firefox.app/Contents/Resources/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi","installDate":1465092614000,"updateDate":1465092614000,"applyBackgroundUpdates":1,"skinnable":true,"size":7134,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"hasBinaryComponents":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"47.0","maxVersion":"47.0"}],"targetPlatforms":[],"seen":true} 1465991649765 addons.xpi DEBUG getModTime: Recursive scan of {972ce4c6-7e08-4474-a285-3208198ce6fd} 1465991649766 DeferredSave.extensions.json DEBUG Save changes 1465991649766 addons.xpi DEBUG Updating database with changes to installed add-ons 1465991649766 addons.xpi-utils DEBUG Updating add-on states 1465991649767 addons.xpi-utils DEBUG Writing add-ons list 1465991649768 addons.xpi DEBUG Registering manifest for /Applications/Firefox.app/Contents/Resources/browser/features/[email protected] 1465991649769 addons.xpi DEBUG Calling bootstrap method startup on [email protected] version 1.0 1465991649769 addons.xpi DEBUG Registering manifest for /Applications/Firefox.app/Contents/Resources/browser/features/[email protected] 1465991649769 addons.xpi DEBUG Calling bootstrap method startup on [email protected] version 1.0.2 1465991649770 addons.xpi DEBUG Registering manifest for /Applications/Firefox.app/Contents/Resources/browser/features/[email protected] 1465991649771 addons.xpi DEBUG Calling bootstrap method startup on [email protected] version 1.3.2 1465991649792 addons.manager DEBUG Registering shutdown blocker for XPIProvider 1465991649792 addons.manager DEBUG Provider finished startup: XPIProvider 1465991649792 addons.manager DEBUG Starting provider: LightweightThemeManager 1465991649792 addons.manager DEBUG Registering shutdown blocker for LightweightThemeManager 1465991649792 addons.manager DEBUG Provider finished startup: LightweightThemeManager 1465991649793 addons.manager DEBUG Starting provider: GMPProvider 1465991649799 addons.manager DEBUG Registering shutdown blocker for GMPProvider 1465991649799 addons.manager DEBUG Provider finished startup: GMPProvider 1465991649799 addons.manager DEBUG Starting provider: PluginProvider 1465991649799 addons.manager DEBUG Registering shutdown blocker for PluginProvider 1465991649799 addons.manager DEBUG Provider finished startup: PluginProvider 1465991649800 addons.manager DEBUG Completed startup sequence 1465991650128 addons.manager DEBUG Starting provider: 1465991650128 addons.manager DEBUG Registering shutdown blocker for 1465991650129 addons.manager DEBUG Provider finished startup: 1465991650135 DeferredSave.extensions.json DEBUG Starting write 1465991650279 addons.repository DEBUG No addons.json found. 1465991650280 DeferredSave.addons.json DEBUG Save changes 1465991650284 DeferredSave.addons.json DEBUG Starting timer 1465991650326 addons.manager DEBUG Starting provider: PreviousExperimentProvider 1465991650327 addons.manager DEBUG Registering shutdown blocker for PreviousExperimentProvider 1465991650327 addons.manager DEBUG Provider finished startup: PreviousExperimentProvider 1465991650335 DeferredSave.extensions.json DEBUG Write succeeded 1465991650336 addons.xpi-utils DEBUG XPI Database saved, setting schema version preference to 17 1465991650337 DeferredSave.addons.json DEBUG Starting write 1465991650372 DeferredSave.addons.json DEBUG Write succeeded

    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:113)
    at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:271)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:119)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:216)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:211)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:128)
    at com.galenframework.browser.SeleniumBrowserFactory.getDriver(SeleniumBrowserFactory.java:95)
    at com.galenframework.browser.SeleniumBrowserFactory.createLocalBrowser(SeleniumBrowserFactory.java:89)
    at com.galenframework.browser.SeleniumBrowserFactory.openBrowser(SeleniumBrowserFactory.java:65)
    at com.galenframework.utils.GalenUtils.createDriver(GalenUtils.java:262)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
    at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
    at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52)
    at org.mozilla.javascript.gen._cmd__18._c_createDriver_2(<cmd>:37)
    at org.mozilla.javascript.gen._cmd__18.call(<cmd>)
    at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:63)
    at org.mozilla.javascript.gen._Users_user1_tests____tests_gl_js_21._c_getSingleDeviceTarget_18(/Users/user1/tests/../tests/gl.js:346)
    at org.mozilla.javascript.gen._Users_user1_tests____tests_gl_js_21.call(/Users/user1/tests/../tests/gl.js)
    at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:63)
    at org.mozilla.javascript.gen._Users_user1_tests____tests_gl_js_21._c_openPage_17(/Users/user1/tests/../tests/gl.js:319)
    at org.mozilla.javascript.gen._Users_user1_tests____tests_gl_js_21.call(/Users/user1/tests/../tests/gl.js)
    at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
    at org.mozilla.javascript.gen._Users_user1_tests_galen_test_js_20._c_anonymous_3(/Users/user1/tests/galen.test.js:29)
    at org.mozilla.javascript.gen._Users_user1_tests_galen_test_js_20.call(/Users/user1/tests/galen.test.js)
    at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2429)
    at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269)
    at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97)
    at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52)
    at org.mozilla.javascript.gen._cmd__17._c_invokeFunc_2(<cmd>:35)
    at org.mozilla.javascript.gen._cmd__17.call(<cmd>)
    at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:63)
    at org.mozilla.javascript.gen._cmd__17._c_anonymous_22(<cmd>:280)
    at org.mozilla.javascript.gen._cmd__17.call(<cmd>)
    at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
    at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3090)
    at org.mozilla.javascript.gen._cmd__17.call(<cmd>)
    at org.mozilla.javascript.JavaAdapter.doCall(JavaAdapter.java:606)
    at org.mozilla.javascript.JavaAdapter.access$000(JavaAdapter.java:15)
    at org.mozilla.javascript.JavaAdapter$1.run(JavaAdapter.java:586)
    at org.mozilla.javascript.Context.call(Context.java:489)
    at org.mozilla.javascript.ContextFactory.call(ContextFactory.java:504)
    at org.mozilla.javascript.JavaAdapter.callMethod(JavaAdapter.java:583)
    at adapter3.execute(<adapter>)
    at com.galenframework.TestRunnable.runTest(TestRunnable.java:75)
    at com.galenframework.TestRunnable.run(TestRunnable.java:101)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    
    opened by tansin 15
  • Report from iframe component not showing details (rel 2.4)

    Report from iframe component not showing details (rel 2.4)

    Before 2.4, all errors from component in iframe were shown on the report. Currently there is only summary info on issues#... image

    Can it be fixed to work as on ver < 2.4 ?

    bug 
    opened by pcieslak 13
  • Relative width as pecentage instead of px

    Relative width as pecentage instead of px

    Right now if we check width or height with other element[screen,viewport,webelement] we give the range as percentage. But in report it is showing as pixel.It should show as percentage as it will be useful to modify the specs

    Suggested Report Is it possible to display them as green or blue galen

    enhancement p3 c2 
    opened by ghost 13
  • [Blocker] Missing dependency on Maven central

    [Blocker] Missing dependency on Maven central

    Hiya,

    Galen is dependant on Rainbow4j which is dependant on a library called jai-core v1.1.3 This librarys jar file is not present in maven central This gives an problem resolving all dependencies when using Galen

    Thanks,

    bug p1 c2 
    opened by claytonneal 13
  • Add JUnit runner for checking specs.

    Add JUnit runner for checking specs.

    This runner makes it possible to use a JUnit test for a single page test. A spec file is assigned to a test class. Every object spec of this file is treated as a single test. This automatically provides JUnit test formatting in IDEs, build tools and CI servers. E.g. you get a test tree in IntelliJ idea that looks like this

    opu3st6-2

    This makes it very easy to spot errors.

    opened by stefanbirkner 11
  • Relative paths not working for tests run by load()

    Relative paths not working for tests run by load()

    We're looking to use load() to explicitly list tests in a master file rather than having Galen find *.test.js files in the project - partly due to a naming conflict with another testing library, and partly as a convenience for enabling/disabling tests and running custom lists of tests.

    When a test file is run using load(), and that file is not in the same directory as the file that called the load function, the called file cannot resolve relative paths within itself. For example:

    // main.test.js
    load('page/page.test.js');
    
    // page.test.js
    test("Footer test", function() {
      var driver = createDriver("http://galenframework.com");
      checkLayout(driver, "page.spec", ["all"]);
      driver.quit();
    });
    
    // cli commands
    cd test
    galen test main.test.js
    
    // error in cli
    org.mozilla.javascript.WrappedException: Wrapped java.io.FileNotFoundException: Can't find file or resource: page.spec (<cmd>#71)
    

    Paste to reproduce locally:

    git clone [email protected]:professant/professant-galen-testing.git -b load-nested-test --single-branch
    
    enhancement p3 c3 ready for test 
    opened by erquhart 11
  • Bump jackson-databind from 2.9.7 to 2.12.6.1

    Bump jackson-databind from 2.9.7 to 2.12.6.1

    Bumps jackson-databind from 2.9.7 to 2.12.6.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies java 
    opened by dependabot[bot] 0
  • Bump gson from 2.8.5 to 2.8.9 in /galen-core

    Bump gson from 2.8.5 to 2.8.9 in /galen-core

    Bumps gson from 2.8.5 to 2.8.9.

    Release notes

    Sourced from gson's releases.

    Gson 2.8.9

    • Make OSGi bundle's dependency on sun.misc optional (#1993).
    • Deprecate Gson.excluder() exposing internal Excluder class (#1986).
    • Prevent Java deserialization of internal classes (#1991).
    • Improve number strategy implementation (#1987).
    • Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990).
    • Support arbitrary Number implementation for Object and Number deserialization (#1290).
    • Bump proguard-maven-plugin from 2.4.0 to 2.5.1 (#1980).
    • Don't exclude static local classes (#1969).
    • Fix RuntimeTypeAdapterFactory depending on internal Streams class (#1959).
    • Improve Maven build (#1964).
    • Make dependency on java.sql optional (#1707).

    Gson 2.8.8

    • Fixed issue with recursive types (#1390).
    • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
    • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).
    Changelog

    Sourced from gson's changelog.

    Version 2.8.9

    • Make OSGi bundle's dependency on sun.misc optional (#1993).
    • Deprecate Gson.excluder() exposing internal Excluder class (#1986).
    • Prevent Java deserialization of internal classes (#1991).
    • Improve number strategy implementation (#1987).
    • Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990).
    • Support arbitrary Number implementation for Object and Number deserialization (#1290).
    • Bump proguard-maven-plugin from 2.4.0 to 2.5.1 (#1980).
    • Don't exclude static local classes (#1969).
    • Fix RuntimeTypeAdapterFactory depending on internal Streams class (#1959).
    • Improve Maven build (#1964).
    • Make dependency on java.sql optional (#1707).

    Version 2.8.8

    • Fixed issue with recursive types (#1390).
    • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
    • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).

    Version 2.8.7

    • Fixed ISO8601UtilsTest failing on systems with UTC+X.
    • Improved javadoc for JsonStreamParser.
    • Updated proguard.cfg (#1693).
    • Fixed IllegalStateException in JsonTreeWriter (#1592).
    • Added JsonArray.isEmpty() (#1640).
    • Added new test cases (#1638).
    • Fixed OSGi metadata generation to work on JavaSE < 9 (#1603).

    Version 2.8.6

    2019-10-04 GitHub Diff

    • Added static methods JsonParser.parseString and JsonParser.parseReader and deprecated instance method JsonParser.parse
    • Java 9 module-info support
    Commits
    • 6a368d8 [maven-release-plugin] prepare release gson-parent-2.8.9
    • ba96d53 Fix missing bounds checks for JsonTreeReader.getPath() (#2001)
    • ca1df7f #1981: Optional OSGi bundle's dependency on sun.misc package (#1993)
    • c54caf3 Deprecate Gson.excluder() exposing internal Excluder class (#1986)
    • e6fae59 Prevent Java deserialization of internal classes (#1991)
    • bda2e3d Improve number strategy implementation (#1987)
    • cd748df Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990)
    • fe30b85 Support arbitrary Number implementation for Object and Number deserialization...
    • 1cc1627 Fix incorrect feature request template label (#1982)
    • 7b9a283 Bump bnd-maven-plugin from 5.3.0 to 6.0.0 (#1985)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies java 
    opened by dependabot[bot] 0
  • Bump commons-io from 2.6 to 2.7

    Bump commons-io from 2.6 to 2.7

    Bumps commons-io from 2.6 to 2.7.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Snyk reports vulnerability for version 2.4.4

    Snyk reports vulnerability for version 2.4.4

    Hi,

    We are using Galen Framework 2.4.4 and upon scanning using Snyk we found there is a vulnerability induced through the freemarker library.

    Snyk recommends -> Upgrade org.freemarker:freemarker to version 2.3.30 or higher to remediate this.

    We understand Galen uses Freemarker 2.3.19, hence the request to upgrade.

    opened by swapnonil 0
  • Bump jackson.version from 2.9.7 to 2.12.1

    Bump jackson.version from 2.9.7 to 2.12.1

    Bumps jackson.version from 2.9.7 to 2.12.1. Updates jackson-core from 2.9.7 to 2.12.1

    Commits

    Updates jackson-databind from 2.9.7 to 2.12.1

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(galen-2.4.4)
A modern testing and behavioural specification framework for Java 8

Introduction If you're a Java developer and you've seen the fluent, modern specification frameworks available in other programming languages such as s

Richard Warburton 250 Sep 12, 2022
The Enterprise-ready testing and specification framework.

Spock Framework Spock is a BDD-style developer testing and specification framework for Java and Groovy applications. To learn more about Spock, visit

Spock Framework 3.3k Jan 5, 2023
A programmer-oriented testing framework for Java.

JUnit 4 JUnit is a simple framework to write repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks. For more infor

JUnit 8.4k Jan 4, 2023
TestNG testing framework

Documentation available at TestNG's main web site. Release Notes 7.4.0 7.3.0 7.1.0 7.0.0 Need help? Before opening a new issue, did you ask your quest

Cedric Beust 1.8k Jan 5, 2023
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

pact-jvm JVM implementation of the consumer driven contract library pact. From the Ruby Pact website: Define a pact between service consumers and prov

Pact Foundation 962 Dec 31, 2022
Toolkit for testing multi-threaded and asynchronous applications

ConcurrentUnit A simple, zero-dependency toolkit for testing multi-threaded code. Supports Java 1.6+. Introduction ConcurrentUnit was created to help

Jonathan Halterman 406 Dec 30, 2022
Advanced Java library for integration testing, mocking, faking, and code coverage

Codebase for JMockit 1.x releases - Documentation - Release notes How to build the project: use JDK 1.8 or newer use Maven 3.6.0 or newer; the followi

The JMockit Testing Toolkit 439 Dec 9, 2022
ScalaTest is a free, open-source testing toolkit for Scala and Java programmers

ScalaTest is a free, open-source testing toolkit for Scala and Java programmers.

ScalaTest 1.1k Dec 26, 2022
Java DSL for easy testing of REST services

Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of usi

REST Assured 6.2k Dec 31, 2022
Cucumber DSL for testing RESTful Web Services

cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using r

C.T.Co 100 Oct 18, 2022
Randomized Testing (Core JUnit Runner, ANT, Maven)

RANDOMIZED TESTING ================== JUnit test runner and plugins for running JUnit tests with pseudo-randomness. See the following for more infor

null 167 Dec 26, 2022
Captures log entries for unit testing purposes

LogCaptor Install with maven <dependency> <groupId>io.github.hakky54</groupId> <artifactId>logcaptor</artifactId> <version>2.4.0</version>

null 215 Jan 1, 2023
Java DSL for easy testing of REST services

Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of usi

REST Assured 6.2k Dec 25, 2022
🎉Back end module of Sonic UI automation testing platform. Sonic-UI自动化测试平台后端模块。

?? Sonic UI automation testing platform. English | 简体中文 Background What is sonic ? Nowadays, automation testing, remote control and other technologies

Eason 1.7k Jan 1, 2023
JVM version of Pact Enables consumer driven contract testing

JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

Pact Foundation 961 Dec 30, 2022
State of the art mutation testing system for the JVM

Pitest (aka PIT) is a state of the art mutation testing system for Java and the JVM. Read all about it at http://pitest.org Releases 1.7.3 #952 Mutate

Henry Coles 1.5k Dec 26, 2022
🎉Ultimate test automation for testing any application on any platform

boyka-java Ultimate test automation for testing any application on any platform boyka-java Setup Write conventional commits 1.

Wasiq Bhamla 52 Dec 30, 2022
Isolated MinIO container management for Java code testing

TestContainers for MinIO MinIO support for the test containers project. Installation Unfortunately, TestContainers for MinIO is not available in any p

Olsi Qose 3 Sep 30, 2022