Complete Properties Reference
You can use these tab groups to navigate and get information about how to manage your desired properties in all the different ways possible.
- Code-based
- CLI-based
- File-based
- Default Values
You can read/write any property programmatically to provide more flexibility and control during runtime.
You can set some properties via the CLI command that you use to execute your tests.
The traditional way of configuring SHAFT properties, using this approach you can simply create your own
custom.properties file.The default/preset values built into SHAFT, with a description of what each one does and the possible values.
Platform
- These properties control the basic target execution platform settings, like execution location and target operating system.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
import org.openqa.selenium.Platform;
/** get **/
String crossBrowserMode = SHAFT.Properties.platform.crossBrowserMode();
String executionAddress = SHAFT.Properties.platform.executionAddress();
String targetPlatform = SHAFT.Properties.platform.targetPlatform();
String proxy = SHAFT.Properties.platform.proxy();
Boolean driverProxy = SHAFT.Properties.platform.driverProxySettings();
Boolean jvmProxy = SHAFT.Properties.platform.jvmProxySettings();
Boolean enableBiDi = SHAFT.Properties.platform.enableBiDi();
/** set **/
SHAFT.Properties.platform.set().crossBrowserMode("off");
SHAFT.Properties.platform.set().executionAddress("local");
SHAFT.Properties.platform.set().targetPlatform(Platform.LINUX.name());
SHAFT.Properties.platform.set().proxySettings("");
SHAFT.Properties.platform.set().driverProxySettings(true);
SHAFT.Properties.platform.set().jvmProxySettings(true);
SHAFT.Properties.platform.set().enableBiDi(true);
mvn -e test "-DexecutionAddress=localhost:4444" "-DtargetOperatingSystem=LINUX"
src/main/resources/properties/custom.properties
SHAFT.CrossBrowserMode=off
executionAddress=local
targetOperatingSystem=LINUX
com.SHAFT.proxySettings=
driverProxySettings=true
jvmProxySettings=true
enableBiDi=true
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| SHAFT.CrossBrowserMode | off | off, sequential, parallelized | • Cross Browser Mode allows SHAFT to run your test class against Chrome, Firefox, and Safari! • You need to have 'Docker Desktop' installed on your machine, and configured to use Linux images. • Off → Your tests will run normally and respect your configuration. • Sequential → Your tests will run on Chrome, Firefox, and Safari in sequence. • Parallelized → Your tests will run on Chrome, Firefox and Safari in parallel. And for each browser they will run in sequence. |
| executionAddress | local | local, dockerized, browserstack, host:port, http://host:port/wd/hub | • For Appium, set the below settings and move to the Mobile tab to continue. • For BrowserStack, set the "Target Operating System" below, and the "Automation Name" in the Mobile tab, then configure the "browserStack.properties" file in your project directory. |
| targetOperatingSystem | Linux | Linux, Windows, Mac, Android, iOS | • The target operating system for test execution. |
| com.SHAFT.proxySettings | | host:port | • Used to configure testing behind a proxy. e.g. corporate proxy. |
| driverProxySettings | true | true, false | • To enable or disable the driver proxy. |
| jvmProxySettings | true | true, false | • To enable or disable the JVM proxy. |
| enableBiDi | true | true, false | • To enable or disable the WebDriver BiDi protocol. |
Web
- These properties control web GUI test automation settings, like target browser, headless execution, and mobile emulation.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
import org.openqa.selenium.remote.Browser;
/** get **/
var targetBrowserName = SHAFT.Properties.web.targetBrowserName();
String targetBrowserName = SHAFT.Properties.web.targetBrowserName();
boolean headlessExecution = SHAFT.Properties.web.headlessExecution();
boolean forceBrowserDownload = SHAFT.Properties.web.forceBrowserDownload();
boolean incognitoMode = SHAFT.Properties.web.incognitoMode();
boolean isMobileEmulation = SHAFT.Properties.web.isMobileEmulation();
boolean mobileEmulationIsCustomDevice = SHAFT.Properties.web.mobileEmulationIsCustomDevice();
String mobileEmulationDeviceName = SHAFT.Properties.web.mobileEmulationDeviceName();
int mobileEmulationWidth = SHAFT.Properties.web.mobileEmulationWidth();
int mobileEmulationHeight = SHAFT.Properties.web.mobileEmulationHeight();
double mobileEmulationPixelRatio = SHAFT.Properties.web.mobileEmulationPixelRatio();
String mobileEmulationUserAgent = SHAFT.Properties.web.mobileEmulationUserAgent();
String baseURL = SHAFT.Properties.web.baseURL();
int browserWindowWidth = SHAFT.Properties.web.browserWindowWidth();
int browserWindowHeight = SHAFT.Properties.web.browserWindowHeight();
/** set **/
SHAFT.Properties.web.set().targetBrowserName(Browser.CHROME.browserName())
.headlessExecution(false)
.forceBrowserDownload(false)
.incognitoMode(false)
.isMobileEmulation(false)
.mobileEmulationIsCustomDevice(false)
.mobileEmulationDeviceName("")
.mobileEmulationWidth(360)
.mobileEmulationHeight(640)
.mobileEmulationPixelRatio(1.0)
.mobileEmulationUserAgent("")
.baseURL("")
.browserWindowWidth(1920)
.browserWindowHeight(1080);
mvn -e test "-DtargetBrowserName=FIREFOX" "-DheadlessExecution=true" "-DforceBrowserDownload=true"
src/main/resources/properties/custom.properties
targetBrowserName=chrome
forceBrowserDownload=false
headlessExecution=false
incognitoMode=false
isMobileEmulation=false
mobileEmulation.isCustomDevice=false
mobileEmulation.deviceName=
mobileEmulation.width=
mobileEmulation.height=
mobileEmulation.pixelRatio=1.0
mobileEmulation.userAgent=
baseURL=
browserWindowWidth=1920
browserWindowHeight=1080
pageLoadStrategy=none
readinessState=none
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| targetBrowserName | chrome | chrome, firefox, safari, edge | • The target web browser for test execution. |
| forceBrowserDownload | false | true, false | • This only works for Chrome and Firefox. • Allows you to use Selenium Manager to download the latest version from CfT which promises better performance and reliability. |
| headlessExecution | false | true, false | • This only works for Chrome, Firefox and Edge. |
| incognitoMode | false | true, false | • Enable browser incognito/private mode. |
| isMobileEmulation | false | true, false | • This only works for Chrome and Edge. |
| mobileEmulation.isCustomDevice | false | true, false | • This only works for Chrome and Edge. |
| mobileEmulation.deviceName | | blackberryZ30, BlackberryPlayBook, galaxyNote3, galaxyNoteII, galaxySIII, galaxyS5, galaxyS8, samsungGalaxyS8+, galaxyS9+, galaxyTabS4, galaxyFold, samsungGalaxyS20Ultra, samsungGalaxyA51/71, kindleFireHDX, lgOptimusL70, microsoftLumia550, microsoftLumia950, motoG4, nexus10, nexus4, nexus5, nexus5X, nexus6, nexus6P, nexus7, nokiaLumia520, nokiaN9, nestHub, nestHubMax, pixel2, pixel2XL, pixel3, pixel3XL, pixel4, pixel5, jioPhone2, iPhone4, iPhone5/SE, iPhone6/7/8, iPhone6/7/8Plus, iPhoneSE, iPhoneX, iPhoneXR, iPhone12Pro, iPad, iPadPro, iPadAir, iPadMini, surfacePro7, surfaceDuo | • This only works for Chrome and Edge. |
| mobileEmulation.width | | example: 360 | • This only works for Chrome and Edge. |
| mobileEmulation.height | | example: 600 | • This only works for Chrome and Edge. |
| mobileEmulation.pixelRatio | 1.0 | example: 2.0 | • This only works for Chrome and Edge. |
| mobileEmulation.userAgent | | example: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0 | • This only works for Chrome and Edge. |
| baseURL | | example: https://github.com/ShaftHQ/SHAFT_ENGINE | • Base URL for the application under test. |
| browserWindowWidth | 1920 | • Won't work if autoMaximizeBrowserWindow is enabled. | |
| browserWindowHeight | 1080 | • Won't work if autoMaximizeBrowserWindow is enabled. | |
| pageLoadStrategy | none | none, eager, normal | • Controls when Selenium considers the page loaded. |
| readinessState | none | interactive, none, complete | • Controls the document readiness state to wait for. |
Mobile
- These properties control web and/or native mobile GUI test automation settings, like target platform version, path to the app under test, and the activity name that you want to start testing.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
import org.openqa.selenium.Platform;
import io.appium.java_client.remote.AutomationName;
/** get **/
String platformName = SHAFT.Properties.mobile.platformName();
String platformVersion = SHAFT.Properties.mobile.platformVersion();
String deviceName = SHAFT.Properties.mobile.deviceName();
String automationName = SHAFT.Properties.mobile.automationName();
String udid = SHAFT.Properties.mobile.udid();
String browserName = SHAFT.Properties.mobile.browserName();
String browserVersion = SHAFT.Properties.mobile.browserVersion();
String app = SHAFT.Properties.mobile.app();
String appPackage = SHAFT.Properties.mobile.appPackage();
String appActivity = SHAFT.Properties.mobile.appActivity();
/** set **/
SHAFT.Properties.platform.set().targetPlatform(Platform.ANDROID.name());
SHAFT.Properties.mobile.set().platformVersion("13.0")
.deviceName("Google Pixel 7")
.automationName(AutomationName.ANDROID_UIAUTOMATOR2)
.udid("")
.browserName("")
.browserVersion("")
.app("src/test/resources/testDataFiles/apps/ApiDemos-debug.apk")
.appPackage("")
.appActivity("");
mvn -e test "-Dmobile_platformVersion=13.0" "-Dmobile_deviceName=Google Pixel 7"
src/main/resources/properties/custom.properties
targetOperatingSystem=ANDROID
mobile_platformVersion=13.0
mobile_deviceName=Google Pixel 7
mobile_automationName=UIAutomator2
mobile_udid=
browserName=
MobileBrowserVersion=
mobile_app=src/test/resources/testDataFiles/apps/ApiDemos-debug.apk
mobile_appPackage=
mobile_appActivity=
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| mobile_platformVersion | | example: 11.0, 13.0 | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| mobile_deviceName | | example: ANDROID_EMULATOR | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| mobile_automationName | UIAutomator2 | UiAutomator2, Espresso, XCUITest | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| mobile_udid | | example: RQ3005TAQP | • Unique device identifier of the connected physical device (leave empty if not applicable). • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| browserName | | chrome, Chromium, Browser, Safari, samsung | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| MobileBrowserVersion | | example: 83.0.4103.39 | • The latest version of the WebDriver executable that is compatible with the target browser. You can get it from here. • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| mobile_app | | relativePath/to/myApp.apk, absolutePath/to/myApp.apk, http://myapp.com/app.ipa | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| mobile_appPackage | | example: com.example.android.myApp | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
| mobile_appActivity | | example: .MainActivity | • You can add any property from the List of Appium Capabilities directly to your .property files or via CLI arguments, just make sure to add mobile_ as a prefix. |
API
This section lists all configurable properties related to Swagger/OpenAPI contract validation for SHAFT API testing.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
boolean swaggerValidationEnabled = SHAFT.Properties.api.swaggerValidationEnabled();
String swaggerValidationUrl = SHAFT.Properties.api.swaggerValidationUrl();
/** set **/
SHAFT.Properties.api.set()
.swaggerValidationEnabled(true)
.swaggerValidationUrl("https://petstore.swagger.io/v2/swagger.json");
(Work In Progress)
src/main/resources/properties/custom.properties
swagger.validation.enabled=true
swagger.validation.url=https://petstore.swagger.io/v2/swagger.json
| Property Name | Default Value | Description |
|---|---|---|
swagger.validation.enabled | false | Enables or disables Swagger/OpenAPI contract validation for API testing. |
swagger.validation.url | (empty) | URL or file path to the OpenAPI schema for validation. |
Flags
- These properties control generic platform flags, like the number of test retry attempts, auto-maximization of web browser window, and any other built-in checks or workarounds that aim to stabilize your test execution.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
var clickUsingJavascriptWhenWebDriverClickFails = SHAFT.Properties.flags.clickUsingJavascriptWhenWebDriverClickFails();
/** set **/
SHAFT.Properties.flags.set().clickUsingJavascriptWhenWebDriverClickFails(true);
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| automaticallyAddRecommendedChromeOptions | false | true, false | • Automatically add recommended Chrome options for better stability. |
| retryMaximumNumberOfAttempts | 0 | example: 0, 1, 2, 3, 4, ...etc | • Maximum number of retry attempts for failed tests. |
| forceCaptureSupportingEvidenceOnRetry | true | true, false | • When retrying a failed test, capture screenshots and logs to attach as supporting evidence in the Allure report. |
| autoMaximizeBrowserWindow | true | true, false | • Automatically maximize browser window on launch. |
| forceCheckForElementVisibility | true | true, false | • Force check for element visibility before interactions. |
| forceCheckElementLocatorIsUnique | true | true, false | • Force check that element locator returns only one element. |
| forceCheckTextWasTypedCorrectly | false | true, false | • Force check that text was typed correctly after typing action. |
| attemptClearBeforeTyping | true | true, false | • ⚠️ Deprecated — use clearBeforeTypingMode instead. |
| attemptClearBeforeTypingUsingBackspace | false | true, false | • ⚠️ Deprecated — use clearBeforeTypingMode instead. |
| clearBeforeTypingMode | native | native, backspace, off | • Replaces both deprecated attemptClearBeforeTyping and attemptClearBeforeTypingUsingBackspace flags. native = clear using native Selenium method, backspace = clear by deleting letter by letter, off = no clearing before typing. |
| scrollingMode | javascript | javascript, native | • Mode for scrolling to elements. |
| attemptToClickBeforeTyping | false | true, false | • Attempt to click on element before typing. |
| forceCheckNavigationWasSuccessful | false | true, false | • Force check that navigation to URL was successful. |
| respectBuiltInWaitsInNativeMode | true | true, false | • Respect built-in waits when using native mode. |
| forceCheckStatusOfRemoteServer | false | true, false | • Force check status of remote server before execution. |
| clickUsingJavascriptWhenWebDriverClickFails | false | true, false | • Fallback to JavaScript click when WebDriver click fails. |
| autoCloseDriverInstance | true | true, false | • Automatically close driver instance after test execution. |
| automaticallyAssertResponseStatusCode | true | true, false | • Automatically assert API response status code. |
| maximumPerformanceMode | 0 | 0, 1, 2 | • 0 → Disabled, 1 → Without Headless Execution, 2 → With Headless Execution • Enabling maximumPerformanceMode will disable all complementary features to ensure the fastest execution possible with a 400% calculated performance boost. |
| skipTestsWithLinkedIssues | false | true, false | • It is recommended to leave this feature disabled unless you explicitly want to skip any tests that have the @Issue or @Issues annotation. |
| disableCache | false | true, false | • To disable the cache in a browser session. |
| enableTrueNativeMode | false | true, false | • Enable true native mode for mobile testing. |
| handleNonSelectDropDown | true | true, false | • Handle non-select dropdown elements. |
| validateSwipeToElement | false | true, false | • Validate swipe to element action on mobile. |
| disableSslCertificateCheck | false | true, false | • Disable SSL certificate validation. |
| telemetry.enabled | true | true, false | • Enable telemetry data collection for SHAFT usage analytics. |
Reporting
- These properties control the engine's built-in reporting capabilities, such as whether or not to capture the element name in the report to make it more readable, capturing WebDriver logs for debugging, and the behavior of reports before and after test execution.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
var captureElementName = SHAFT.Properties.reporting.captureElementName();
/** set **/
SHAFT.Properties.reporting.set().captureElementName(false);
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| captureElementName | true | true, false | • Capture element name in reports for better readability. |
| captureWebDriverLogs | false | true, false | • Capture WebDriver logs for debugging purposes. |
| alwaysLogDiscreetly | false | true, false | • Always log discreetly without detailed output. |
| debugMode | false | true, false | • Enable debug mode for verbose logging. |
| openLighthouseReportWhileExecution | false | true, false | • Open Lighthouse performance report during execution. |
| cleanSummaryReportsDirectoryBeforeExecution | true | true, false | • Clean summary reports directory before execution. |
| openExecutionSummaryReportAfterExecution | false | true, false | • Open execution summary report after test execution. |
| disableLogging | true | true, false | • Disable all logging output. |
| attachFullLog | false | true, false | • Attach the full log file to the Allure report after test execution. |
Allure
- These properties control the engine's built-in Allure reporting capabilities, such as when to open the report, whether to accumulate history and reports, and how to customize the report appearance.
- Since version 8.3.20240827, the Allure properties have been renamed and extended. The old property names are listed in the table below for reference.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
boolean automaticallyOpen = SHAFT.Properties.allure.automaticallyOpen();
boolean accumulateHistory = SHAFT.Properties.allure.accumulateHistory();
boolean accumulateReports = SHAFT.Properties.allure.accumulateReports();
boolean cleanResultsDirectory = SHAFT.Properties.allure.cleanResultsDirectory();
boolean generateArchive = SHAFT.Properties.allure.generateArchive();
String customLogo = SHAFT.Properties.allure.customLogo();
String customTitle = SHAFT.Properties.allure.customTitle();
/** set **/
SHAFT.Properties.allure.set()
.automaticallyOpen(true)
.accumulateHistory(true)
.accumulateReports(true)
.cleanResultsDirectory(true)
.generateArchive(false)
.customLogo("https://example.com/logo.png")
.customTitle("My Test Suite Report");
(Work In Progress)
src/main/resources/properties/custom.properties
allure.automaticallyOpen=true
allure.accumulateHistory=true
allure.accumulateReports=true
allure.cleanResultsDirectory=true
allure.generateArchive=false
allure.customLogo=https://example.com/logo.png
allure.customTitle=My Test Suite Report
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| allure.automaticallyOpen | true | true, false | • Open the Allure report in the default browser automatically after test execution. (previously: openAllureReportAfterExecution) |
| allure.accumulateHistory | true | true, false | • When true, accumulates Allure history across runs to enable trend graphs and historical comparison. When false, old results are deleted before the new run. (previously: cleanAllureResultsDirectoryBeforeExecution) |
| allure.accumulateReports | true | true, false | • When true, keeps previous Allure HTML report files in the report directory. When false, only the latest run report is retained. |
| allure.cleanResultsDirectory | true | true, false | • Clean the Allure results directory before each test run. Disable when merging results from multiple partial runs. |
| allure.generateArchive | false | true, false | • Generate a self-contained ZIP archive of the Allure report after test execution. Useful for sharing or archiving in CI pipelines. (previously: generateAllureReportArchive) |
| allure.customLogo | (SHAFT default logo URL) | URL or local file path | • URL or local path to a custom logo image to replace the default SHAFT logo in the Allure report. |
| allure.customTitle | Test run report | Any string | • Custom title displayed in the header of the generated Allure report. |
Timeouts
- These properties control the engine's built-in synchronization capabilities, such as waiting for lazy loading, element identification timeout, API connection timeout, database query timeout, and shell session timeout.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
var elementIdentificationTimeout = SHAFT.Properties.timeouts.defaultElementIdentificationTimeout();
/** set **/
SHAFT.Properties.timeouts.set().defaultElementIdentificationTimeout(5);
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| waitForLazyLoading | true | true, false | Especially useful for modern/responsive web apps using React, Vue, Angular, ...etc |
| browserNavigationTimeout | 30 | (seconds) | Timeout in seconds for browser navigation. |
| pageLoadTimeout | 30 | (seconds) | Timeout in seconds for page load. |
| scriptExecutionTimeout | 30 | (seconds) | Timeout in seconds for script execution. |
| defaultElementIdentificationTimeout | 10 | (seconds) | Default timeout in seconds for element identification. |
| apiSocketTimeout | 30 | (seconds) | Timeout in seconds for API socket connections. |
| apiConnectionTimeout | 30 | (seconds) | Timeout in seconds for API connections. |
| apiConnectionManagerTimeout | 30 | (seconds) | Timeout in seconds for API connection manager. |
| shellSessionTimeout | 30 | (seconds) | Timeout in seconds for shell session. |
| dockerCommandTimeout | 30 | (seconds) | Timeout in seconds for Docker commands. |
| databaseLoginTimeout | 30 | (seconds) | Timeout in seconds for database login. |
| databaseNetworkTimeout | 30 | (seconds) | Timeout in seconds for database network operations. |
| databaseQueryTimeout | 30 | (seconds) | Timeout in seconds for database queries. |
| waitForRemoteServerToBeUp | false | true, false | Wait for remote server to be up before execution. |
| timeoutForRemoteServerToBeUp | 1 | (seconds) | Timeout in seconds for remote server to be up. |
| remoteServerInstanceCreationTimeout | 5 | (seconds) | Timeout in seconds for remote server instance creation. |
| waitUntilTimeout | 60 | (seconds) | Timeout in seconds for wait.until operations. |
Visuals
- These properties control the engine's built-in visual validation and AI capabilities, such as the visual matching threshold for AI powered element identification, when to take screenshots, screenshot types, videos, animated GIFs, and complete page snapshots.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
var visualMatchingThreshold = SHAFT.Properties.visuals.visualMatchingThreshold();
/** set **/
SHAFT.Properties.visuals.set().visualMatchingThreshold(0.7);
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| visualMatchingThreshold | 0.90 | any decimal value between 0.00 and 1.00 | Visual matching threshold for AI powered element identification. |
| screenshotParams_scalingFactor | 1.0 | example: 1.0, 0.5, 2.0 | Scaling factor for screenshots. |
| screenshotParams_whenToTakeAScreenshot | ValidationPointsOnly | Always, ValidationPointsOnly, FailuresOnly | When to automatically capture screenshots during test execution. |
| screenshotParams_screenshotType | fullPage | fullPage, regular, element | Type of screenshot to capture. |
| screenshotParams_highlightElements | true | true, false | Highlight elements in screenshots. |
| screenshotParams_highlightMethod | AI | AI, NATIVE | Method for highlighting elements in screenshots. |
| screenshotParams_skippedElementsFromScreenshot | | CSS selectors separated by commas | Elements to skip/hide when taking screenshots. |
| screenshotParams_watermark | true | true, false | Add watermark to screenshots. |
| screenshotParams_watermarkOpacity | 0.2 | 0.0 to 1.0 | Opacity level for screenshot watermark. |
| createAnimatedGif | false | true, false | Create animated GIF from screenshots. |
| animatedGif_frameDelay | 500 | milliseconds | Delay between frames in animated GIF. |
| videoParams_recordVideo | false | true, false | Record video during test execution. |
| videoParams_scope | DriverSession | DriverSession, TestMethod | Scope for video recording. |
| whenToTakePageSourceSnapshot | Never | Never, Always, FailuresOnly | When to capture page source snapshots. |
Jira
- These properties control the engine's built-in Jira and Xray integrations for test management and defect reporting.
- Code-based
- CLI-based
- File-based
- Default Values
import com.shaft.driver.SHAFT;
/** get **/
var reportBugs = SHAFT.Properties.jira.reportBugs();
/** set **/
SHAFT.Properties.jira.set().reportBugs(true);
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| jiraInteraction | false | true, false | Enable Jira integration for test management. |
| jiraUrl | https:// | URL | Jira instance URL. |
| projectKey | | String | Jira project key. |
| authorization | : | username:token | Jira authorization credentials (username:token or username:password). |
| authType | basic | basic, bearer | Authorization type for Jira API. |
| reportTestCasesExecution | false | true, false | Report test case execution results to Jira/Xray. |
| reportPath | target/surefire-reports/testng-results.xml | File path | Path to test results file for Jira/Xray reporting. |
| ExecutionName | | String | Name for test execution in Jira/Xray. |
| ExecutionDescription | | String | Description for test execution in Jira/Xray. |
| ReportBugs | false | true, false | Automatically report bugs to Jira on test failures. |
| assignee | | String | Default assignee for reported bugs. |
| allure.link.tms.pattern | https:///{} | URL pattern | Pattern for TMS (Test Management System) links in Allure. |
| allure.link.custom.pattern | {} | URL pattern | Pattern for custom links in Allure reports. |
Cucumber
- These properties control your cucumber settings, such as the path to your feature files, the package names for your step definition classes, and any plugins you want to enable.
- You can only configure these properties by editing your
src/main/resources/properties/cucumber.propertiesfile.
- Code-based
- CLI-based
- File-based
- Default Values
(N/A)
(Work In Progress)
src/main/resources/properties/cucumber.properties
#############
# https://cucumber.io/docs/cucumber/api/#list-configuration-options
##############
cucumber.ansi-colors.disabled=false
#true or false. default: false
cucumber.execution.dry-run=false
#true or false. default: false
cucumber.execution.limit=
#number of scenarios to execute (CLI only).
cucumber.execution.order=lexical
#lexical, reverse, random or random:[seed] (CLI only). default: lexical
cucumber.execution.strict=true
#true or false. default: true.
cucumber.execution.wip=false
#true or false. default: false.
cucumber.features=src/test/resources
#comma separated paths to feature files. example: path/to/example.feature, path/to/other.feature
cucumber.filter.name=
#regex. example: .*Hello.*
cucumber.filter.tags=
#tag expression. example: @smoke and not @slow
cucumber.glue=customCucumberSteps, com.shaft.cucumber
# comma separated package names. example: com.example.glue
cucumber.plugin=pretty, json:allure-results/cucumber.json, html:allure-results/cucumberReport.html, com.shaft.listeners.CucumberTestRunnerListener
# comma separated plugin strings. example: pretty, json:path/to/report.json
cucumber.object-factory=
#object factory class name. example: com.example.MyObjectFactory
cucumber.snippet-type=underscore
#underscore or camelcase. default: underscore
cucumber.publish.quiet=true
CUCUMBER_PUBLISH_ENABLED=false
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| cucumber.features | src/test/resources | ||
| cucumber.filter.name | `` | ||
| cucumber.filter.tags | `` | ||
| cucumber.glue | customCucumberSteps, com.shaft.cucumber | ||
| cucumber.plugin | pretty, json:allure-results/cucumber.json, html:allure-results/cucumberReport.html, com.shaft.listeners.CucumberTestRunnerListener |
Healenium
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| recovery-tries | 1 | ||
| score-cap | 0.5 | ||
| heal-enabled | false | ||
| serverHost | localhost | ||
| serverPort | 7878 | ||
| imitatePort | 8000 |
Paths
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| propertiesFolderPath | src/main/resources/properties/ | Path to the custom properties files folder. | |
| defaultPropertiesFolderPath | src/main/resources/properties/default | Path to the default properties files folder. | |
| dynamicObjectRepositoryPath | src/main/resources/dynamicObjectRepository/ | Path to the dynamic object repository folder. | |
| testDataFolderPath | src/test/resources/testDataFiles/ | Path to the test data files folder. | |
| downloadsFolderPath | target/downloadedFiles | Path to the folder for downloaded files. | |
| allureResultsFolderPath | allure-results/ | Path to the Allure results output folder. | |
| extentReportsFolderPath | extent-reports/ | Path to the Extent reports output folder. | |
| executionSummaryReportFolderPath | execution-summary/ | Path to the execution summary report folder. | |
| PerformanceReportFolderPath | performanceReport/ | Path to the performance (Lighthouse) report output folder. | |
| video.folder | allure-results/videos | Path to the folder where recorded videos are saved. | |
| servicesFolderPath | src/test/resources/META-INF/services/ | Path to the META-INF services folder for custom service implementations. | |
| applitoolsApiKey | `` | Applitools API key for visual AI testing integration. |
Pattern
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| testDataColumnNamePrefix | Data | ||
| allure.link.issue.pattern | `` |
Tinkey
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| tinkey.keysetFilename | `` | ||
| tinkey.kms.serverType | `` | ||
| tinkey.kms.credentialPath | `` | ||
| tinkey.kms.masterKeyUri | `` |
BrowserStack
- These properties control SHAFT's built-in integration with BrowserStack.
- You can find all supported Web-based (Desktop or Mobile) execution properties & values in BrowserStack's Web Capability Generator
- You can find all supported Native Mobile App execution properties & values in BrowserStack's Appium Capability Generator
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| browserStack.userName | `` | BrowserStack username for authentication. | |
| browserStack.accessKey | `` | BrowserStack access key for authentication. | |
| browserStack.platformVersion | `` | Mobile platform version for BrowserStack execution. | |
| browserStack.deviceName | `` | Mobile device name for BrowserStack execution. | |
| browserStack.appUrl | `` | Use appUrl to test a previously uploaded app file. | |
| browserStack.customID | `` | Use customID to test the latest uploaded version as the above url expires regularly. | |
| browserStack.appName | `` | App name for uploading to BrowserStack. | |
| browserStack.appRelativeFilePath | `` | Relative file path to the app for uploading to BrowserStack. | |
| browserStack.osVersion | `` | In case of Desktop web testing you must also set the targetOperatingSystem, and targetBrowserName. | |
| browserStack.browserVersion | `` | Browser version, optional, uses random by default. | |
| browserStack.local | false | true, false | Enable BrowserStack local testing. |
| browserStack.seleniumVersion | 4.40.0 | Selenium version to use on BrowserStack. | |
| browserStack.acceptInsecureCerts | true | true, false | Accept insecure SSL certificates. |
| browserStack.debug | false | true, false | Enable debug mode for BrowserStack. |
| browserStack.networkLogs | false | true, false | Enable network logs capture on BrowserStack. |
| browserStack.geoLocation | `` | Set geolocation for BrowserStack tests. | |
| browserStack.appiumVersion | 3.1.0 | Appium version to use on BrowserStack for mobile testing. | |
| browserStack.buildName | `` | Build name to group test runs in the BrowserStack dashboard. | |
| browserStack.projectName | `` | Project name to group builds in the BrowserStack dashboard. | |
| browserStack.parallelsPerPlatform | 1 | Number of parallel sessions to run per platform when using the BrowserStack SDK. | |
| browserStack.browserstackAutomation | true | true, false | Enable BrowserStack Automation (SDK mode). Set to false to use legacy WebDriver URL mode. |
| browserStack.platformsList | `` | Comma-separated list of platforms for cross-browser/cross-device parallel runs (SDK mode). | |
| browserStack.customBrowserStackYmlPath | `` | Path to a custom browserstack.yml configuration file. Overrides individual BrowserStack properties. |
LambdaTest
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| LambdaTest.username | `` | LambdaTest username for authentication. | |
| LambdaTest.accessKey | `` | LambdaTest access key for authentication. | |
| LambdaTest.platformVersion | `` | Mobile platform version for LambdaTest execution. | |
| LambdaTest.deviceName | `` | Mobile device name for LambdaTest execution. | |
| LambdaTest.appUrl | `` | Use appUrl to test a previously uploaded app file. | |
| LambdaTest.appProfiling | false | true, false | Enable app profiling during mobile testing. |
| LambdaTest.osVersion | `` | OS version for desktop browser testing on LambdaTest. | |
| LambdaTest.visual | false | true, false | Enable visual logs (screenshots) on LambdaTest. |
| LambdaTest.video | false | true, false | Enable video recording on LambdaTest. |
| LambdaTest.appName | `` | Use appName and appRelativeFilePath to upload a new app file and test it | |
| LambdaTest.appRelativeFilePath | `` | Use appName and appRelativeFilePath to upload a new app file and test it | |
| LambdaTest.resolution | `` | Screen resolution for desktop browser testing (e.g. 1920x1080). | |
| LambdaTest.headless | false | true, false | Enable headless browser execution on LambdaTest. |
| LambdaTest.timezone | `` | Timezone for test execution on LambdaTest (e.g. UTC+5:30). | |
| LambdaTest.project | SHAFT_Engine | Project name to group builds in the LambdaTest dashboard. | |
| LambdaTest.build | Build Name | Build name to group test runs in the LambdaTest dashboard. | |
| LambdaTest.tunnel | false | true, false | Enable LambdaTest tunnel for testing locally hosted applications. |
| LambdaTest.tunnelName | `` | Name of the LambdaTest tunnel to use when LambdaTest.tunnel is enabled. | |
| LambdaTest.buildName | `` | Build name used in the LambdaTest SDK configuration. Use this instead of LambdaTest.build when using the LambdaTest SDK (automate-config.yml). | |
| LambdaTest.selenium_version | `` | Selenium version to use on LambdaTest. | |
| LambdaTest.driver_version | `` | Browser driver version to use on LambdaTest. | |
| LambdaTest.w3c | true | true, false | Enable W3C WebDriver protocol on LambdaTest. |
| LambdaTest.browserVersion | `` | Browser version, optional, uses random by default. | |
| LambdaTest.geoLocation | `` | Geolocation for test execution (e.g. US, IN). | |
| LambdaTest.debug | false | true, false | Enable debug mode (command logs) on LambdaTest. |
| LambdaTest.acceptInsecureCerts | true | true, false | Accept insecure SSL certificates on LambdaTest. |
| LambdaTest.networkLogs | false | true, false | Enable network logs capture on LambdaTest. |
| LambdaTest.appiumVersion | 3.0.2 | Appium version to use on LambdaTest for mobile testing. | |
| LambdaTest.autoGrantPermissions | true | true, false | Automatically grant app permissions on mobile devices. |
| LambdaTest.autoAcceptAlerts | true | true, false | Automatically accept alerts on mobile devices. |
| LambdaTest.isRealMobile | true | true, false | Run tests on real mobile devices (as opposed to emulators/simulators). |
| LambdaTest.console | false | true, false | Enable console log capture on LambdaTest. |
| LambdaTest.customID | `` | Custom app ID for testing a previously uploaded app by its custom identifier. |
Performance
- Code-based
- CLI-based
- File-based
- Default Values
(Work In Progress)
(Work In Progress)
(Work In Progress)
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| lightHouseExecution | false | true, false | Enable Lighthouse performance testing execution. |
| lightHouseExecution.port | 8888 | Port to use for Lighthouse performance testing. | |
| generatePerformanceReport | true | true, false | Generate a performance report after Lighthouse execution. |
TestNG
- These properties control your TestNG parallelization settings.
- You can only configure these properties by editing your
src/main/resources/properties/testng.propertiesfile.
- Code-based
- CLI-based
- File-based
- Default Values
(N/A)
(Work In Progress)
src/main/resources/properties/testng.properties
setParallel=NONE
setThreadCount=1
setVerbose=1
setPreserveOrder=true
setGroupByInstances=true
setDataProviderThreadCount=1
#Test Suite Timeout in minutes
testSuiteTimeout=1440
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| setParallel | NONE | METHODS, CLASSES, TESTS, INSTANCES | |
| setParallelMode | STATIC | STATIC, DYNAMIC | |
| setThreadCount | 1 | ThreadCount is used as-is in case of STATIC mode. Total ThreadCount is automatically calculated for DYNAMIC mode; (Total ThreadCount = Number of available processor cores * setThreadCount) | |
| setVerbose | 1 | ||
| setPreserveOrder | false | true, false | |
| setGroupByInstances | false | true, false | |
| setDataProviderThreadCount | 1 |
Log4j
- These properties control your Log4j2 logging settings.
- You can only configure these properties by editing your
src/main/resources/properties/Log4j2.propertiesfile.
- Code-based
- CLI-based
- File-based
- Default Values
(N/A)
(Work In Progress)
src/main/resources/properties/Log4j2.properties
name=PropertiesConfig
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.disableAnsi=false
appender.console.layout.pattern=%highlight{[%p]}{FATAL=red blink, ERROR=red bold, WARN=yellow bold, INFO=fg_#0060a8 bold, DEBUG=fg_#43b02a bold, TRACE=black} %style{%m }%style{| %-logger}{bright_black} %style{- %-thread}{bright_black} %style{- %d{hh:mm:ss a}}{bright_black} %n
appender.console.filter.threshold.type=ThresholdFilter
appender.console.filter.threshold.level=info
appender.file.type=File
appender.file.name=LOGFILE
appender.file.fileName=target/logs/log4j.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.filter.threshold.type=ThresholdFilter
appender.file.filter.threshold.level=debug
rootLogger=debug, STDOUT, LOGFILE
logger.app.name=org.apache.http.impl.client
logger.app.level=WARN
| Property Name | Default Value | Possible Values | Description |
|---|---|---|---|
| appender.console.layout.pattern | %highlight{[%p]}{FATAL=red blink, ERROR=red bold, WARN=yellow bold, INFO=fg_#0060a8 bold, DEBUG=fg_#43b02a bold, TRACE=black} %style{%m} %style{| @%d{hh:mm:ss a}}{bright_black} %n | Click here to learn more about log4j2 pattern layouts | |
| appender.console.filter.threshold.level | info | fatal, error, warn, info, debug, trace | |
| appender.file.fileName | target/logs/log4j.log | ||
| appender.file.layout.pattern | [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n | ||
| appender.file.filter.threshold.level | debug | fatal, error, warn, info, debug, trace |