Try   HackMD

Requirment

  1. Selenium Server (Grid) (Version recommend >= 4.8)
  2. Rapi-runner
  3. Maven

rapi-api xml

<dependency>
  <groupId>io.github.rapitest</groupId>
  <artifactId>rapi-api</artifactId>
  <version>4.0.0-SNAPSHOT</version>
</dependency>

Rapi Config Document

  • Before using the Rapi API, you need to know our Rapi runner config file schema. You can learn more about it here.

Quick Start

package io.github.rapitest;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import io.github.rapitest.config.*;

public class Main 
{
    public void main() throws IOException, InterruptedException, Exception
    {
        ArrayList<String> testSuites = new ArrayList<>();
        testSuites.add("path/to/testSuite");
        Input input = Input.builder().withTestSuites(testSuites).build();

        Map<String, Object> caps = new HashMap<>();
        caps.put("browserName", "firefox");
        ArrayList<WebDriverCommonConfig> service = new ArrayList<WebDriverCommonConfig>();
        service.add(
                        WebDriverBrowserConfig.builder()
                                        .withBrowsers(Browser.builder().withCapability(caps).build())
                                        .withServerUrl("http://url.to.selenium.server").build());

        Config config = Config.builder().withInput(input)
                        .withWebdriver(WebDriver.builder().withConfigs(service).build()).build();
        System.out.println(config.toString());
        Rapi rapi = new Rapi("path/to/rapi/runner", config);
        RapiReport report = rapi.run();
        System.out.println(report.getJson());
    }
}

More Exmple

  • Test with Multiple testSuites
...
ArrayList<String> testSuites = new ArrayList<>();
testSuites.add("path/to/testSuite1");
testSuites.add("path/to/testSuite2");
Input input = Input.builder().withTestSuites(testSuites).build();
Config config = Config.builder().withInput(input).build();
...
  • Test with Multiple Selenium Servers
Map<String, Object> caps = new HashMap<>();
caps.put("browserName", "firefox");
ArrayList<WebDriverCommonConfig> service = new ArrayList<WebDriverCommonConfig>();
service.add(
                WebDriverBrowserConfig.builder()
                                .withBrowsers(Browser.builder().withCapability(caps).build())
                                .withServerUrl("http://url.to.selenium.server1").build());
service.add(
                WebDriverBrowserConfig.builder()
                                .withBrowsers(Browser.builder().withCapability(caps).build())
                                .withServerUrl("http://url.to.selenium.server2").build());
Config config = Config.builder().withWebdriver(WebDriver.builder().withConfigs(service).build()).build();
...
  • Modify Play Config
Play playConfig = Play.builder().setMode(1).setEntry("testsuite.testcase");
Config config = Config.builder().withPlay(playConfig).build();
...

Report Format

{ version: { "sideex": [ 3, 7, 3 ], "format": [ 1, 0, 1 ] }, "Reports":[ { title: "20221006 12-46-49", sessionId: "", type: "chrome", browser: "chrome 103.0.5060.134", platform: "linux", deviceName: "unknown", lang: null, inputFile: "/home/fourcolor/Documents/sideex/sideex-2021/modules/main/dist/test-jobs/214e8cd6-94db-4b32-993a-8cf9af0aa04f/inputs/suites/test1.json", startTime: "20221006 12:46:49", endTime: "20221006 12:47:02", failureCaseNum: 0, failureSuiteNum: 0, successCaseNum: 1, successSuiteNum: 1, logs: [ { type: "info", message: "Playing test suite Untitled Test Suite 2" }, ], status: "completed", suites: [ { title: "Untitled Test Suite 2", idText: "suite-20", status: "success", cases: [ 0 ] } ], cases: [ { title: "Untitled Test Case 2", idText: "case-20", suiteIdText": "suite-20", status: "success", localVars: [], globalVars: [], records: [ { "name": "open", "target": "https://sideex.io/", "value": "", "status": "success", "time": 4175, "valData": [] }, { "name": "setViewportSize", "target": "", "value": "1848,948", "status": "warn", "time": 744, "valData": [] }, ... ] } ], snapshot: { "image-162": { //base64 image } } }, { ... } ] }