Skip to content

0.5.0 - 2022-10-23

Compare
Choose a tag to compare
@valfirst valfirst released this 01 Nov 14:20
· 2231 commits to master since this release
release-0.5.0
6ebb1c2

Added

#3145 (Closes #712) [vividus] Add ability to put data with line breaks to ExamplesTable

New inlined property is introduced:

{processEscapeSequences=true}
|header          |
|line 1\nline 2  |

#3251 [vividus] Allow to use dots (.) in ExamplesTable column names

Scenario: Resolve ExamplesTable placeholders with dot character
Then `<xy.z>` is equal to `hello`
Examples:
|xy.z |
|hello|

#3228 [vividus] Add ability to set custom range for ITERATING table transformer

{transformer=ITERATING, startInclusive=0, endInclusive=4}

#3225 (Closes #3118) [vividus] Add substringBefore & substringAfter expressions

#{substringBefore(abc, b)}  =>  a
#{substringAfter(abc, b)}  =>  c

#3288 [vividus] Add ability to set the encryption password via environment variable

Environment variable is VIVIDUS_ENCRYPTOR_PASSWORD

#3172 [vividus-plugin-yaml] Introduce YAML plugin (Incubating)

"Incubating" means that the functionality is currently a work-in-progress and may change in the future releases.

New step:

When I save YAML element value from `$yaml` by YAML path `$yamlPath` to $scopes variable `$variableName`

#3264 [vividus-plugin-web-app][vividus-plugin-mobile-app] Add step waiting for number of elements

New step:

When I wait until number of elements located by `$locator` is $comparisonRule $number

#3202 [vividus-plugin-web-app][vividus-plugin-mobile-app] Improve logging of search results

The logging at search doesn't add several messages for single operation anymore, the single message is always logged and its content depends on search results.

#3258 [vividus-plugin-web-app][vividus-plugin-mobile-app] Add validation of locator visibility flag in steps waiting appearance/disappearance

The cases like waiting for appearance of invisible elements are invalid, and now such cases leads to the errors breaking steps execution

#3235 (Closes #3190) [vividus-plugin-web-app] Add step clicking on element with retry on StaleElementReferenceException

New step syntax:

When I click on element located by `$locator`

#3259 [vividus-plugin-web-app] Add ability to configure path to Safari driver executable

web.driver.safari.driver-executable-path=/path/to/driver/executable

#3273 [vividus-plugin-web-app] Add ability to configure Edge browser path

web.driver.edge.binary-path=/path/to/custom/browser/executable

#3138 [vividus-plugin-mobile-app] Add step changing device screen orientation

New step:

When I change device screen orientation to $orientation

#3128 [vividus-plugin-mobile-app] Make steps executing JS available for mobile app tests

Steps:

When I execute javascript `$script` with arguments:$arguments
When I execute javascript `$script` and save result to $scopes variable `$variableName`

#3287 [vividus-plugin-mobile-app] Add support of iOS NS Predicate locator

When I tap on element located by `iosNsPredicate(name == 'selectImage')`

See iOS Predicate Syntax for more details

#3131 [vividus-plugin-web-app-to-rest-api] Add SVG files to crawler exclusions

Now SVG-files are not attempted to be parsed by Crawler.

#3229, #3245 [vividus-plugin-electron] Simplify naming of properties

New properties for Electron-based applications management are introduced:

  • electron-app.binary-path
  • electron-app.chromium-version
  • electron-app.command-line-arguments

#3173 [VIVIDUS Docker image] Add database connectors into docker image

The following database drivers were added to VIVIDUS Docker image:
* mysql-connector-java (MySQL)
* mssql-jdbc (Microsoft SQL Server, Azure SQL)
* postgresql (PostgreSQL)
* ojdbc10 (Oracle Database)
* db2jcc (DB2)
* csvjdbc (CSV)
* h2 (H2)
* snowflake-jdbc (Snowflake)

#3156 [VIVIDUS developers only] Standardize plugins configuration

VIVIDUS plugins configuration is standardized and the developers guide is published.

Changed

#3136 (Fixes #1746) [vividus] Fix step executing sub-steps basing on the provided conditional to accept strict conditions only

Breaking change: the tests may be broken after migration, in case if invalid condition value is used, the tests and/or conditions must be fixed.

The affected step

When the condition '$condition' is true I do$stepsToExecute

Previously this step executed sub-steps if $condition was equal to true and did nothing if $condition was not equal to true. This behaviour is considered error-prone and can be misleading (especially if $condition was implemented with mistakes). The new behaviour for $condition value is:

Steps are performed Steps are not performed
1 0
true false
t f
on off
yes no
y n
And the error will stop steps execution in case if unsupported $condition value is provided.

#3263 [vividus] Improve error on invalid byRandomRows in FILTERING transformer

New error message adds more details, for example:

'byRandomRows' is 4, but it must be less than or equal to 3 (the number of table rows)

#3290 [vividus] Improve logging of test meta-info

  • Shrinked logged table with failures and errors
  • Unified format and align logged info tables
  • Fixed rendering of table with failures and errors in Windows console

#3290 [vividus] Do not mask properties with 'keys' word

The property db.duplicate-keys-strategy was false-positively masked as the one containing sensitive information.

#2914 [vividus-plugin-visual] Adjust DPR calculation for android

Breaking change: there is a chance the full re-establishment of visual baselines may be required for Android mobile apps tests.

The ratio between the device window size and taken screenshot size is always equal to 1 regardless of the device display density on Android platform. (See for details: appium/appium-base-driver#306).

#3149 [vividus-plugin-mobile-app]/[vividus-plugin-visual] Do not downscale mobile app screenshots by default

Breaking change: the downscaling was deprecated in 0.4.0 and it's a default behaviour now. There is a chance (depending on the DPR of the used devices/simulators) nothing will be affected. But also there is a possibility, the full re-establishment of visual baselines will be required for iOS mobile apps tests. Alternatively the downscaling may be enabled back via the property, but keep in mind this behaviour is deprecated and will be removed completely in VIVIDUS 0.6.0.

The downscaling is disabled by default:

mobile.screenshot.downscale=false

#2978 (Closes #2896) [vividus-plugin-web-app] Use chrome driver to manage Opera browser

Now ChromeDriver is used to run tests in Opera browser, the following property becomes mandatory for Opera:

web.driver.OPERA.binary-path=<path to opera>

#2947 [vividus-plugin-web-app] Stop using Windows 10 as default platform

Now the properties defining the required platform:

selenium.grid.platform-name=
selenium.grid.platform-version=

are left empty for all profiles except web/desktop/iexplore (Windows 10 is preserved here). If any Cloud provider is used, make use its default platform values match your requirements.

#3255 [vividus-plugin-web-app] Decrease Selenium Cloud idle timeout from 6 to 3 minutes

selenium.grid.idle-timeout=180

Deprecated

#3222 [vividus] Unify syntax of steps initializing variables

Deprecated step Replacement pattern
When I initialize the $scopes variable `$variableName` with value `$variableValue` Given I initialize <scopes> variable `<variableName>` with value `<variableValue>`
Given I initialize the $scopes variable `$variableName` using template `$templatePath` with parameters:$templateParameters Given I initialize <scopes> variable `<variableName>` using template `<templatePath>` with parameters:<templateParameters>

#3228 [vividus] Deprecate limit property of ITERATING table transformer

The replacement for

{transformer=ITERATING, limit=5}

is

{transformer=ITERATING, startInclusive=0, endInclusive=4}

#3166 [vividus-plugin-azure-***] Deprecate non-generic steps managing Azure resources

Deprecated step Replacement pattern
When I collect system topics in resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.EventGrid/systemTopics` using API version `2021-12-01` and save it to <scopes> variable `<variableName>`
When I retrieve properties of key vault with name `$keyVaultName` from resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.KeyVault/vaults/<keyVaultName>` using API version `2021-10-01` and save it to <scopes> variable `<variableName>`
When I collect SQL Servers from resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers` using API version `2021-08-01-preview` and save it to <scopes> variable `<variableName>`
When I collect databases from SQL Server `$sqlServerName` from resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<sqlServerName>/databases` using API version `2021-08-01-preview` and save it to <scopes> variable `<variableName>`
When I retrieve properties of database with name `$databaseName` from SQL Server `$sqlServerName` from resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<sqlServerName>/databases/<databaseName>` using API version `2021-08-01-preview` and save it to <scopes> variable `<variableName>`
When I collect storage accounts in resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.Storage/storageAccounts` using API version `2021-08-01` and save it to <scopes> variable `<variableName>`
When I retrieve blob service properties of storage account with name `$storageAccountName` from resource group `$resourceGroupName` and save them as JSON to $scopes variable `$variableName` When I get Azure resource with identifier `resourceGroups/<resourceGroupName>/providers/Microsoft.Storage/storageAccounts/<storageAccountName>/blobServices/default` using API version `2021-08-01` and save it to <scopes> variable `<variableName>`

#3260 [vividus-plugin-web-app] Deprecate device-orientation-specific mobile profiles

The profiles listed below are deprecated and will be removed in further VIVIDUS versions:

  • web/phone/iphone/landscape
  • web/phone/iphone/portrait
  • web/tablet/ipad/landscape
  • web/tablet/ipad/portrait

selenium.grid.capabilities.deviceOrientation property should be used to configure device orientation and
custom meta tags and meta filters should be used to configure test suite to execute.

#3265 [vividus-plugin-web-app] Deprecate web/desktop/edge/chromium profile in favor of web/desktop/edge

web/desktop/edge/chromium profile is deprecated in favor of web/desktop/edge and will be removed in further VIVIDUS versions.
EdgeHTML was retired some time ago, so only Chromium backed Edge is available now, thus there is no need to distinguish Edge builds anymore.

#3177 [vividus-plugin-web-app] Deprecate steps validating list of links within search context

Deprecated step Replacement
Then context contains list of link items with the text and link: $expectedLinkItems Then number of elements found by `$locator` is $comparisonRule `$quantity`
Then context contains list of link items with the text: $expectedLinkItems Then number of elements found by `$locator` is $comparisonRule `$quantity`

#3178 [vividus-plugin-web-app] Deprecate step changing state of multiple checkboxes

Deprecated step Replacement
When I $checkboxAction all checkboxes located by `$checkboxesLocator` "When I $checkBoxAction checkbox located by `$checkboxLocator`" and "When I find $comparisonRule `$number` elements by `$locator` and for each element do$stepsToExecute"

#3235 [vividus-plugin-web-app] Deprecate step clicking on element without retry on StaleElementReferenceException

Deprecated step Replacement pattern
When I click on element located `$locator` When I click on element located by `<locator>`

#3278 [vividus-plugin-web-app] Deprecate majority of steps using explicit xpaths as locators

Deprecated step Replacement pattern
Then invisible element by xpath '$xpath' exists Then number of invisible elements `By.xpath(<xpath>)` is equal to `1`
When I set the number of elements found by xpath '$xpath' to the '$scopes' variable '$variableName' When I save number of elements located `By.xpath(<xpath>)` to <scopes> variable `<variableName>`
Then the number of elements found by the xpath '$xpath' is $comparisonRule '$quantity' Then number of elements found by `By.xpath(<xpath>)` is <comparisonRule> `<quantity>`
When I add '$text' to a field by the xpath '$xpath' When I add `<text>` to field located `By.xpath(<xpath>)`
When I clear a field by the xpath '$xpath' When I clear field located `By.xpath(<xpath>)`
When I clear a field by the xpath '$xpath' using keyboard When I clear field located `By.xpath(<xpath>)` using keyboard
When I enter '$text' in a field by the xpath '$xpath' When I enter `<text>` in field located `By.xpath(<xpath>)`
When I select '$text' from a drop down by the xpath '$xpath' When I select `<text>` from drop down located `By.xpath(<xpath>)`
Then an element by the xpath '$xpath' does not exist Then number of elements found by `By.xpath(<xpath>)` is equal to `0`
When I click on an element by the xpath '$xpath' When I click on element located by `xpath(<xpath>)`
When I click on all elements by xpath '$xpath' When I click on all elements located `By.xpath(<xpath>)`
Then each element by the xpath '$xpath' has same '$dimension' Then each element located `By.xpath(<xpath>)` has same `<dimension>`
Then each element by the xpath '$elementXpath' has '$number' child elements by the xpath '$childXpath' Then each element with locator `By.xpath(<elementXpath>)` has `<number>` child elements with locator `By.xpath(<childXpath>)`
Then at least one element by the xpath '$xpath' exists Then number of elements found by `By.xpath(<xpath>)` is greater than or equal to `1`
Then an element by the xpath '$xpath' exists Then number of elements found by `By.xpath(<xpath>)` is equal to `1`
When I hover a mouse over an element with the xpath '$xpath' When I hover mouse over element located `By.xpath(<xpath>)`
When I perform right click on an element by the xpath '$xpath' When I perform right click on element located `By.xpath(<xpath>)`
When I wait until an element with the xpath '$xpath' appears When I wait until element located `By.xpath(<xpath>)` appears
When I wait until an element with the xpath '$xpath' disappeares When I wait until element located `By.xpath(<xpath>)` disappears

#3250 [vividus-plugin-web-app][vividus-plugin-mobile-app] Align syntax of step validating elements sorting order

Deprecated step Replacement pattern
Then elements located `$locator` are sorted by text in $sortingOrder order Then elements located by `<locator>` are sorted by text in <sortingOrder> order

#3289 [vividus-plugin-mobile-app] Unify syntax of steps performing tap and swipe actions

Deprecated step Replacement pattern
When I tap on element located `$locator` with duration `$duration` When I tap on element located by `<locator>` with duration `<duration>`
When I tap on element located `$locator` When I tap on element located by `<locator>`
When I swipe $direction to element located `$locator` with duration $swipeDuration When I swipe <direction> to element located by `<locator>` with duration <swipeDuration>

#3220 (Closes #3207) [vividus-plugin-rest-api] Unify syntax of REST API steps

Deprecated step Replacement pattern
When I send HTTP $httpMethod to the relative URL '$relativeURL' When I execute HTTP <httpMethod> request for resource with relative URL `<relativeURL>`
When I save response body to the $scopes variable '$variableName' Given I initialize <scopes> variable `<variableName>` with value `${response}`
Then the response does not contain body Then response does not contain body
Then the response body $comparisonRule '$content' Then `${response}` is <comparisonRule> `<content>`
Then the response body $validationRule resource at '$resourcePath' Then response body <validationRule> resource at `<resourcePath>`
Then the response code is $comparisonRule '$responseCode' Then response code is <comparisonRule> `<responseCode>`
Then the response time should be less than '$responseTimeThresholdMs' milliseconds Then response time is less than `<responseTimeThresholdMs>` milliseconds
Then response header '$httpHeaderName' contains attribute: $attributes Then response header `<httpHeaderName>` contains elements:<attributes>
Then the value of the response header '$httpHeaderName' $comparisonRule '$value' Then value of response header `<httpHeaderName>` <comparisonRule> `<value>`
Then the number of the response headers with the name '$headerName' is $comparisonRule $value Then number of response headers with name `<httpHeaderName>` is <comparisonRule> <value>
When I save response header '$httpHeaderName' value to $scopes variable '$variableName' When I save response header `<httpHeaderName>` value to <scopes> variable `<variableName>`
Then the connection is secured using $securityProtocol protocol Then connection is secured using <securityProtocol> protocol

#3211 [vividus-plugin-json] [vividus-plugin-rest-api] Unify syntax of steps to work with JSON

Deprecated step Replacement pattern
When I save JSON element value from context by JSON path `$jsonPath` to $scopes variable `$variableName` When I save JSON element value from `${json-context}` by JSON path `<jsonPath>` to <scopes> variable `<variableName>`
When I save JSON element from context by JSON path `$jsonPath` to $scopes variable `$variableName` When I save JSON element from `${json-context}` by JSON path `<jsonPath>` to <scopes> variable `<variableName>`
When I convert JSON from context to $scopes variable `$variableName` When I convert JSON `${json-context}` to <scopes> variable `<variableName>`
When I set number of elements found by JSON path `$jsonPath` to $scopes variable `$variableName` When I save number of elements from `${json-context}` found by JSON path `<jsonPath>` to <scopes> variable `<variableName>`
When I find $comparisonRule `$elementsNumber` JSON elements by `$jsonPath` and for each element do$stepsToExecute When I find <comparisonRule> `<elementsNumber>` JSON elements from `${json-context}` by `<jsonPath>` and for each element do<stepsToExecute>
When I find $comparisonRule '$elementsNumber' JSON elements by '$jsonPath' and for each element doa$stepsToExecute When I find <comparisonRule> '<elementsNumber>' JSON elements from '${json-context}' by '<jsonPath>' and for each element do<stepsToExecute>
When I find $comparisonRule `$elementsNumber` JSON elements in context by `$jsonPath` and until variable `$variableName` $variableMatcher `$expectedValue` for each element I do:$stepsToExecute When I find <comparisonRule> `<elementsNumber>` JSON elements in `${json-context}` by `<jsonPath>` and until variable `<variableName>` <variableMatcher> `<expectedValue>` for each element I do:<stepsToExecute>
When I find $comparisonRule '$elementsNumber' JSON elements in context by '$jsonPath' and until variable '$variableName' $variableMatcher '$expectedValue' for each element I do:$stepsToExecute When I find <comparisonRule> '<elementsNumber>' JSON elements in '${json-context}' by '<jsonPath>' and until variable '<variableName>' <variableMatcher> '<expectedValue>' for each element I do:<stepsToExecute>
Then JSON element value from context by JSON path `$jsonPath` $comparisonRule `$expectedValue` Then JSON element value from `${json-context}` by JSON path `<jsonPath>` <comparisonRule> `<expectedValue>`
Then JSON element by JSON path `$jsonPath` is equal to `$expectedJson`$options Then JSON element from `${json-context}` by JSON path `<jsonPath>` is equal to `<expectedJson>`<options>
Then number of JSON elements by JSON path `$jsonPath` is $comparisonRule $elementsNumber Then number of JSON elements from `${json-context}` by JSON path `<jsonPath>` is <comparisonRule> <elementsNumber>

Removed

#3113 [vividus-plugin-web-app] Remove deprecated excessive image steps

Removed step (deprecated in 0.4.0) Replacement
When I hover a mouse over an image with the src '$src' When I hover a mouse over an element with the xpath './/img[@​src='<src>']'
When I hover a mouse over an image with the tooltip '$tooltipImage' When I hover a mouse over an element with the xpath './/img[@​alt='<tooltipImage>' or @​title='<tooltipImage>']'
When I click on an image with the src '$src' When I click on an element by the xpath './/img[@​src='<src>']'
When I click on an image with the name '$imageName' When I click on an element by the xpath './/img[@​*='<imageName>' or text()='<imageName>']'
Then an image with the src '$src' exists Then number of elements found by `By.xpath(.//img[@​src='<src>'])` is equal to `1`
Then a [$state] image with the src '$src' exists Then number of elements found by `By.xpath(.//img[@​src='<src>'])->filter.state(<state>)` is equal to `1`
Then an image with the src '$src' does not exist Then number of elements found by `By.xpath(.//img[@​src='<src>'])` is equal to `0`
Then an image with the src containing '$srcpart' exists Then number of elements found by `By.xpath(.//img[contains(@​src,'<srcpart>')])` is equal to `1`
Then an image with the tooltip '$tooltip' and src containing '$srcpart' exists Then number of elements found by `By.xpath(.//img[contains(@​src,'<srcpart>') and (@​alt='<tooltip>' or @​title='<tooltip>')])` is equal to `1`
Then an image with the src '$imageSrc' and tooltip '$tooltip' exists Then number of elements found by `By.xpath(.//img[@​src='<imageSrc>' and (@​alt='<tooltip>' or @​title='<tooltip>')])` is equal to `1`
Then a [$state] image with the src '$imageSrc' and tooltip '$tooltip' exists Then number of elements found by `By.xpath(.//img[@​src='<imageSrc>' and (@​alt='<tooltip>' or @​title='<tooltip>')])->filter.state(<state>)` is equal to `1`
Then a [$state] image with the src containing '$srcpart' exists Then number of elements found by `By.xpath(.//img[contains(@​src,'<srcpart>')])->filter.state(<state>)` is equal to `1`
Then a [$state] image with the tooltip '$tooltipImage' exists Then number of elements found by `By.xpath(.//img[@​alt='<tooltipImage>' or @​title='<tooltipImage>'])->filter.state(<state>)` is equal to `1`
Then an image with the tooltip '$tooltipImage' exists Then number of elements found by `By.xpath(.//img[@​alt='<tooltipImage>' or @​title='<tooltipImage>'])` is equal to `1`

#3114 [vividus-plugin-web-app] Remove deprecated non-unified steps setting search context

Removed step (deprecated in 0.4.0) Replacement
When I change context to an element by the xpath '$xpath' When I change context to element located `By.xpath(<xpath>)`
When I change context to an element by the CSS selector '$cssSelector' When I change context to element located `By.cssSelector(<cssSelector>)`
When I change context to an element with the name '$name' When I change context to element located `By.name(<name>)`
When I change context to the page When I reset context

#3129 [vividus-plugin-web-app] Remove support of deprecated @browserWindowSize meta tag

@browserWindowSize meta tag (deprecated in 0.4.1) is removed. The replacement is step:

When I change window size to `$targetSize`

#2991 (Closes #2489) [vividus-plugin-web-app] Remove deprecated non-unified video player steps

Removed step (deprecated in 0.4.3) Replacement
When I play video in the video player with the name '$videoPlayerName' When I play video in video player located `xpath(//video[@*='<videoPlayerName>'])`
When I rewind time to '$number' seconds in the video player with the name '$videoPlayerName' When I rewind time to `<number>` seconds in video player located `xpath(//video[@*='<videoPlayerName>'])`
When I pause video in the video player with the name '$videoPlayerName' When I pause video in video player located `xpath(//video[@*='<videoPlayerName>'])`

#2972 (Closes #2660) [vividus-plugin-web-app] Remove deprecate non-unified step interacting with local storage

Removed step (deprecated in 0.4.6:

Then local storage item with `$key` does not exist

Replacement:

Then local storage item with key `<key>` does not exist

#3151 [vividus-plugin-web-app] Remove deprecated steps executing JavaScript

Removed step (deprecated in 0.4.10) Replacement
When I perform javascript '$jsCode' and save result to the '$scopes' variable '$variableName' When I execute javascript `<jsCode>` and save result to <scopes> variable `<variableName>`
When I perform async javascript '$jsCode' and save result to the '$scopes' variable '$variableName' When I execute async javascript `<jsCode>` and save result to <scopes> variable `<variableName>`

#3112 [vividus-plugin-mobile-app] Remove deprecated step switching to web view by index

The removed step (deprecated in 0.4.0) is:

When I switch to web view with index `$index`

The reason of the removal is the order of web views returned by Appium is not consistent.

  • For Android platform the web views are retrieved by parsing UNIX socket names from /proc/net/unix.
  • For iOS platform the web views are considered as separate processes within the active application.
    Sorting the web view by Inode number for android or PID for iOS doesn't seem logical for end users and as practice shows the order is not guaranteed.

The replacement is the step switching to the web view by name:

When I switch to web view with name that $comparisonRule `$value`

#3115 [vividus-plugin-rest-api] Remove deprecated non-unified HTTP and JSON steps

Removed step (deprecated in 0.4.0) Replacement
When I send HTTP $httpMethod to the relative URL '$relativeURL' with content: '$content' Given request body: <content>
When I send HTTP <httpMethod> to the relative URL '<relativeURL>'
Then a JSON element by the JSON path '$jsonPath' exists Then number of JSON elements by JSON path `<jsonPath>` is > 0
When I save a JSON element from response by JSON path '$jsonPath' to $scopes variable '$variableName' When I save JSON element from `${response}` by JSON path `<jsonPath>` to <scopes> variable `<variableName>`
When I save JSON element from response by JSON path `$jsonPath` to $scopes variable `$variableName` When I save JSON element from `${response}` by JSON path `<jsonPath>` to <scopes> variable `<variableName>`

#3041 (Closes #2539) [vividus-plugin-rest-api] Remove deprecate non-unified step executing HTTP request

Removed step (deprecated in 0.4.4) Replacement
When I issue a HTTP $httpMethod request for a resource with the URL '$url' When I execute HTTP <httpMethod> request for resource with URL `<url>`

#3154 [vividus-plugin-rest-api] Remove deprecated non-unified step validating ZIP-archives from the latest HTTP response

Removed step (deprecated in 0.4.9) Replacement
Then the response archive contains entries with the names:$parameters Then `${response-as-bytes}` archive contains entries with names:<parameters>

#3154 [vividus-plugin-rest-api] Remove deprecated steps interacting with ZIP-archives from the latest HTTP response

Removed step (deprecated in 0.4.10) Replacement
When I save content of the response archive entries to the variables:$parameters When I save content of `${response-as-bytes}` archive entries to variables:<parameters>
Then response archive contains entries with names:$parameters Then `${response-as-bytes}` archive contains entries with names:<parameters>

#3034 (Closes #2512) [vividus-plugin-html] Remove deprecated non-unified HTML steps

Removed step (deprecated in 0.4.3) Replacement
When I save $dataType of element from HTML `$html` by CSS selector `$cssSelector` to $scopes variable `$variableName` When I save <dataType> of element found by CSS selector `<cssSelector>` in HTML `<html>` to <scopes> variable `<variableName>`
Then HTML `$html` contains data `$expectedData` by CSS selector `$cssSelector` Then element found by CSS selector `<cssSelector>` in HTML `<html>` contains text `<expectedData>`
When I save `$attributeName` attribute value of element from HTML `$html` by CSS selector `$cssSelector` to $scopes variable `$variableName` When I save `<attributeName>` attribute value of element found by CSS selector `<cssSelector>` in HTML `<html>` to <scopes> variable `<variableName>`

#3148 [vividus-plugin-web-app-to-rest-api] Remove deprecated FROM_HEADLESS_CRAWLING transformer properties

Removed property (deprecated in 0.4.6) Replacement
bdd.transformer.headless.filter-redirects transformer.from-headless-crawling.filter-redirects
bdd.transformer.headless.seed-relative-urls transformer.from-headless-crawling.seed-relative-urls

#3158 [vividus-plugin-web-app-to-rest-api] Remove deprecated non-unified table transformers properties

FROM_HEADLESS_CRAWLING transformer properties:

Removed property (deprecated in 0.4.7) Replacement
transformer.headless.* transformer.from-headless-crawling.*

FROM_SITEMAP transformer properties:

Removed property (deprecated in 0.4.7) Replacement
bdd.transformer.sitemap.ignore-errors transformer.from-sitemap.ignore-errors
bdd.transformer.sitemap.filter-redirects transformer.from-sitemap.filter-redirects

#3127 (Closes ##3126) [vividus-plugin-visual] Remove deprecated steps with unclear syntax

Removed step (deprecated in 0.4.11) Replacement
When I $actionType baseline with `$name` When I <actionType> baseline with name `<name>`
When I $actionType baseline with `$name` using screenshot configuration:$screenshotConfiguration When I <actionType> baseline with name `<name>` using screenshot configuration:<screenshotConfiguration>
When I $actionType baseline with `$name` ignoring:$checkSettings When I <actionType> baseline with name `<name>` ignoring:<checkSettings>
When I $actionType baseline with `$name` ignoring:$checkSettings using screenshot configuration:$screenshotConfiguration When I <actionType> baseline with name `<name>` ignoring:<checkSettings> using screenshot configuration:<screenshotConfiguration>

#3127 (Closes ##3126) [vividus-plugin-visual] Remove deprecated steps and properties with misleading visual baseline naming

Removed property (deprecated in 0.4.13) Replacement
ui.visual.baseline-repository ui.visual.baseline-storage
Removed step (deprecated in 0.4.13) Replacement
When I $actionType baseline with name `$name` using repository `$repository` When I <actionType> baseline with name `<name>` using storage `<repository>`
When I $actionType baseline with name `$name` using repository `$repository` and screenshot configuration:$screenshotConfiguration When I <actionType> baseline with name `<name>` using storage `<repository>` and screenshot configuration:<screenshotConfiguration>
When I $actionType baseline with name `$name` using repository `$repository` and ignoring:$checkSettings When I <actionType> baseline with name `<name>` using storage `<repository>` and ignoring:<checkSettings>
When I $actionType baseline with name `$name` using repository `$repository` and ignoring:$checkSettings and screenshot configuration:$screenshotConfiguration When I <actionType> baseline with name `<name>` using storage `<repository>` and ignoring:<checkSettings> and screenshot configuration:<screenshotConfiguration>

#3127 (Closes ##3126) [vividus-plugin-visual] Remove deprecate non-generic property configuring the folder for filesystem baseline storage

Removed property (deprecated in 0.4.13) Replacement
ui.visual.baselines-folder ui.visual.baseline-storage.filesystem.folder

#3155 [vividus-plugin-applitools] Remove deprecated Applitools properties to align naming

Remove property (deprecated in 0.4.9) Replacement
web.visual.applitools.execute-api-key ui.visual.applitools.execute-api-key
web.visual.applitools.read-api-key ui.visual.applitools.read-api-key
web.visual.applitools.baseline-env-name ui.visual.applitools.baseline-env-name
web.visual.applitools.host-app ui.visual.applitools.host-app
web.visual.applitools.host-os ui.visual.applitools.host-os
web.visual.applitools.viewport-size ui.visual.applitools.viewport-size
web.visual.applitools.match-level ui.visual.applitools.match-level
web.visual.applitools.server-uri ui.visual.applitools.server-uri
web.visual.applitools.app-name ui.visual.applitools.app-name

#3150 [vividus-plugin-datetime] Remove deprecated locale property for generateDate expression

Removed property (deprecated in 0.4.15) Replacement
bdd.date-expression-processor.locale expression.generate-date.locale

#3153 [vividus-plugin-excel] Remove deprecated steps validating of Excel document from the latest HTTP response

Removed step (deprecated in 0.4.10) Replacement
Then response contains excel sheet with index `$index` and records:$records Then `${response-as-bytes}` contains excel sheet with index `<index>` and records:<records>
Then response contains excel sheet with name `$name` and records:$records Then `${response-as-bytes}` contains excel sheet with name `<name>` and records:<records>

#3146 [vividus-plugin-azure-*] Remove deprecated plugin-specific properties configuring Azure environment

All Azure service environment properties (azure.{azure-service-name}.environment) deprecated in 0.4.4 are removed:

  • azure.data-factory.environment
  • azure.event-grid.environment
  • azure.event-hub.environment
  • azure.functions.environment
  • azure.key-vault.environment
  • azure.sql-db.environment
  • azure.storage-account.environment

There are actually 4 different, hosted clouds called Microsoft Azure. There’s the Public Azure Cloud and there are also separate Azure clouds for US Government, Germany, and China. There is no reason to use different types of clouds within one eco-system, thus there is no reason to provide the ability to use plugins for different clouds within single test execution (https://docs.microsoft.com/en-us/graph/deployments).

#3152 [vividus-plugin-azure-storage-account] Remove deprecated Blob Service endpoint property

Removed property (deprecated in 0.4.11) Replacement
azure.storage-account.<storage-account-key> azure.storage-account.<storage-account-key>.blob-service

Fixed

#3165 [vividus] Fix reporting shattering when system after story step failed

Now the report is generated and displays failures in system after story steps correctly.

#3174 [vividus] Do not mark composite step with composed comments as commented

The status of the composite step ignores the comment status and is equal to the highest status of the composite steps.

#3232 [vividus] Fix resolution of story-level ExamplesTable placeholders in scenario-level ExamplesTable placeholder name

Story example demoing the fixed behaviour:

Lifecycle:
Examples:
|a|
|y|

Scenario: Resolve story-level ExamplesTable placeholders in scenario-level ExamplesTable placeholder name
Then `<x<a>z>` is equal to `hello`
Examples:
|xyz  |
|hello|

#3160 [vividus] Fix generation of data for ru-RU locale

#{generateLocalized(Address.streetAddress, ru-RU)}
#{generateLocalized(Company.name, ru-RU)}

#3188 [vividus-plugin-web-app] Do not wait for element presence in step waiting its disappearance

The affected step is:

When I wait until an element with the tag '$elementTag' and attribute '$attributeType'='$attributeValue' disappears

#3275 [vividus-plugin-web-app] Fix publishing of web element source code

outerHTML is used instead of innerHTML in order to attach the full source code of the search context (including search context root element).

#3200 (Relates #2750) [vividus-plugin-web-app][vividus-plugin-mobile-app] Take into account visibility parameter at wait on search

The visibility flag of the locator is taken into account while searching for elements with waiting enabled.

#3201 (Closes #2750) [vividus-plugin-web-app][vividus-plugin-mobile-app] Search for element at first in the step validating element existence

The affected step is:

Then element located `$locator` exists for `$duration` duration

The step searches for the element to validate existence (this search may include wait for element appearance if it's configured) and then validates the element has presented for the period specified by the duration.

#3134 [vividus-plugin-mobile-app] Do not log app capability if it's not available

BrowserStack doesn't return app capability, so nothing should be logged in this case.

#3213 [vividus-plguin-mobile-app] Fix swipe exit condition to handle search context set to element

Swipe-actions take into search context set before.

[vividus-plugin-saucelabs] Use Sauce Connect REST API endpoint instead of generic one

SauceConnect has started failing with error URL https://eu-central-1.saucelabs.com/rest/v1/*****/tunnels - 406 (Not Acceptable) Error: request failed. The fix is to use the endpoints listed here: https://docs.saucelabs.com/basics/data-center-endpoints/. For example, the old endpoint https://eu-central-1.saucelabs.com/rest/v1/ is replaced with a new one https://api.eu-central-1.saucelabs.com/rest/v1/.

#3133 [vividus-plugin-browserstack] Fix wait for Network Logs to address BrowserStack API changes

BrowserStack has started returning 403 Forbidden error on attempt to retrieve Network Logs while they are processing.

Promoted features

Promoted features are features that were incubating in previous versions of VIVIDUS but are now supported and subject to backwards compatibility.

Azure DevOps Exporter

Azure DevOps Exporter vividus-to-azure-devops-exporter is promoted to stable.

Azure Plugins

The following Azure plugins are promoted to stable:

  • vividus-plugin-azure-event-hub
  • vividus-plugin-azure-key-vault
  • vividus-plugin-azure-resource-manager
  • vividus-plugin-azure-sql-db

Avro plugin

Avro plugin vividus-plugin-avro is promoted to stable.

WinRM plugin

WinRM plugin vividus-plugin-winrm is promoted to stable.

Notifications

The feature to send notifications upon tests completion is promoted to stable.

Self-healing UI context

Self-healing UI context (vividus-plugin-web-app, vividus-plugin-mobile-app) is promoted to stable.