0.5.1 - 2022-11-25
Added
#3297 [vividus-plugin-mobitru] Introduce integration with Mobitru (Incubating)
"Incubating" means that the functionality is currently a work-in-progress and may change in the future releases.
New plugin defines profile (mobitru
) with a set of the preconfigured properties. In order to simplify work with Mobitru the plugin waits for the requested device to be available, takes it in the usage and installs application.
#3325 [vividus-plugin-shell] Introduce plugin to execute commands using shell (Incubating)
"Incubating" means that the functionality is currently a work-in-progress and may change in the future releases.
New plugin provides functionality to execute commands via Shell. New steps:
When I execute command `$command` and save result to $scopes variable `$variableName`
When I execute command `$command` using $shellName and save result to $scopes variable `$variableName`
#3357 [vividus] Allow empty tables in CARTESIAN_PRODUCT
transformer
If any of tables provided to CARTESIAN_PRODUCT
transformer is empty, the resulting table will also be empty. Previously an error was thrown in case of empty table input.
#3385 [vividus] Introduce INDEXING
transformer
INDEXING
transformer adds a column with the rows indices in the specified order. Indices are zero-based.
{transformer=INDEXING, order=ASCENDING}
|key |
|value |
|value2|
will result in
|key |index|
|value |0 |
|value2|1 |
#3358 [vividus-plugin-web-app] Add step to open new browser tab
New step:
When I open new tab
#3318 [vividus-plugin-web-app] Add ability to use self-signed certificates for browser proxy
New property:
proxy.mitm.mitm-manager-type= IMPERSONATED
it defines the MITM type using the corresponding certificates. SELF_SIGNED
MITM manager uses self-signed certificates that
are generated lazily if the given key store file doesn't yet exist. Please note that certificates are usually generated
in the current working directory.
#3359 [vividus-plugin-web-app] [vividus-plugin-mobile-app] Add ability to compress images published to report
New property:
ui.report.image-compression-quality=1
it enables compressions of the images published to the report using the specified compression quality. If 1 is set then no compression will be performed.
#3381 [vividus-plugin-web-app] [vividus-plugin-mobile-app] Unify syntax of wait steps
New steps:
When I wait until element located by `$locator` appears
When I wait until element located by `$locator` disappears
Then element located by `$locator` exists for `$duration` duration
#3381 [vividus-plugin-web-app] Unify syntax of wait steps
New steps:
When I wait `$duration` with `$pollingDuration` polling until element located by `$locator` becomes $state
When I wait until state of element located by `$locator` is $state
When I wait until element located by `$locator` is stale
When I wait until element located by `$locator` contains text `$text`
Then element located by `$locator` disappears in `$timeout`
#3384 [vividus-plugin-web-app] Unify syntax of steps interacting with fields
New steps:
When I clear field located by `$locator`
When I clear field located by `$locator` using keyboard
When I add `$text` to field located by `$locator`
When I enter `$text` in field located by `$locator`
#3302 [vividus-plugin-mobile-app] Add profile for local execution using Appium 2.x server
New profile:
mobile_app/local2
#3350 [vividus-plugin-mobile-app] Add step to perform double tap on element
New step:
When I double tap on element located by `$locator`
#3292 [vividus-plugin-mobile-app] Take into account element position while checking if swiping to it should be stopped
Now element is considered intractable if it's on the central area of screen.
#3298 [vividus-plugin-mobile-app] Optimize viewport screenshot taking
The performance of taking viewport screenshots is improved.
New property is added:
mobile.screenshot.android.append-bottom-navigation-bar=true
it defines whether to append Android bottom navigation bar or not. The default behaviour will be changed in VIVIDUS 0.6.0: the navigation bar won't be appended.
#3348 [vividus-plugin-visual] Improve performance of visual checks in case of high number of detected diffs
#3324 (Closes #3206) [vividus-plugin-azure-resource-manager] Add step to get Azure resource by its URL
New step:
When I get Azure resource with URL `$azureResourceUrl` and save it to $scopes variable `$variableName`
Deprecated
#3381 [vividus-plugin-web-app] [vividus-plugin-mobile-app] Unify syntax of wait steps
Deprecated step | Replacement pattern |
---|---|
When I wait until element located `$locator` appears | When I wait until element located by `<locator>` appears |
When I wait until element located `$locator` disappears | When I wait until element located by `<locator>` disappears |
Then element located `$locator` exists for `$duration` duration | Then element located by `<locator>` exists for `<duration>` duration |
#3381 [vividus-plugin-web-app] Unify syntax of wait steps
Deprecated step | Replacement pattern |
---|---|
When I wait until an element with the text '$text' appears | When I wait until element located by `caseSensitiveText(<text>)` appears |
When I wait until an element with the text '$text' disappears | When I wait until element located by `caseSensitiveText(<text>)` disappears |
When I wait until an element with the name '$elementName' disappears | When I wait until element located by `elementName(<elementName>)` disappears |
When I wait until an element with the name '$elementName' appears | When I wait until element located by `elementName(<elementName>)` appears |
When I wait until the state of an element with the name '$elementName' becomes [$state] | When I wait until state of element located by `elementName(<elementName>)` is <state> |
When I wait until an element with the name '$elementName' is stale | When I wait until element located by `elementName(<elementName>)` is stale |
When I wait until an element with the name '$elementName' contains the text '$text' | When I wait until element located by `elementName(<elementName>)` contains text `<text>` |
Then an element with the name '$elementName' disappears in '$timeout' seconds | Then element located by `elementName(<elementName>)` disappears in `<timeout>` |
When I wait `$duration` with `$pollingDuration` polling until element located `$locator` becomes $state | When I wait `<duration>` with `<pollingDuration>` polling until element located by `<locator>` becomes <state> |
When I wait until state of element located `$locator` is $state | When I wait until state of element located by `<locator>` is <state> |
When I wait until element located `$locator` is stale | When I wait until element located by `<locator>` is stale |
When I wait until element located `$locator` contains text '$text' | When I wait until element located by `<locator>` contains text `<text>' |
Then element located '$locator' disappears in '$timeout' | Then element located by `<locator>` disappears in `<timeout>` |
Deprecated step | Replacement |
---|---|
When I wait until an element with the tag '$elementTag' and attribute '$attributeType'='$attributeValue' disappears | When I wait until element located `$locator` disappears |
When I wait until an element with the tag '$elementTag' and attribute '$attributeType'='$attributeValue' appears | When I wait until element located `$locator` appears |
Then an element with the id '$id' disappears | When I wait until element located `$locator` disappears |
#3377 [vividus-plugin-web-app] Deprecate step clicking on multiple elements
The step
When I click on all elements located `$locator`
is deprecated.
The combination of steps
When I click on element located by `$locator`
and
When I find $comparisonRule `$number` elements by `$locator` and for each element do$stepsToExecute
should be used instead
#3384 [vividus-plugin-web-app] Unify syntax of steps interacting with fields
Deprecated step | Replacement |
---|---|
When I clear field located `$locator` | When I clear field located by `$locator` |
When I clear field located `$locator` using keyboard | When I clear field located by `$locator` using keyboard |
When I add `$text` to field located `$locator` | When I add `$text` to field located by `$locator` |
When I enter `$text` in field located `$locator` | When I enter `$text` in field located by `$locator` |
Deprecated step | Replacement pattern |
---|---|
Then field located `$locator` does not exist | Then number of elements found by `<locator>` is equal to `0` |
Then field located `$locator` exists | Then number of elements found by `<locator>` is equal to `1` |
Then a field with the name '$fieldName' exists | Then number of elements found by `fieldName(<fieldName>)` is equal to `1` |
When I clear a field with the name '$fieldName' | When I clear field located by `fieldName(<fieldName>)` |
When I clear a field with the name '$fieldName' using keyboard | When I clear field located by `fieldName(<fieldName>)` using keyboard |
When I add '$text' to a field with the name '$fieldName' | When I add `<text>` to field located by `fieldName(<fieldName>)` |
When I enter '$text' in a field with the name '$fieldName' | When I enter `<text>` in field located by `fieldName(<fieldName>)` |
Then a field with the name '$fieldName' and text containing '$textpart' exists | Then number of elements found by `fieldName(<fieldName>):a->filter.fieldTextPart(<textpart>)` is equal to `1` |
Then a field with the name '$fieldName' does not exist | Then number of elements found by `fieldName(<fieldName>)` is equal to `0` |
Then a [$state] field with the name '$fieldName' and text '$text' exists | Then number of elements found by `fieldName(<fieldName>)->filter.fieldText(<text>).state(<state>)` is equal to `1` |
Then a field with the name '$fieldName' and text '$text' does not exist | Then number of elements found by `fieldName(<fieldName>):a->filter.fieldText(<text>)` is equal to `0` |
Then a field with the name '$fieldName' and text '$text' exists | Then number of elements found by `fieldName(<fieldName>)->filter.fieldText(<text>)` is equal to `1` |
Then a field with the name '$fieldName' and placeholder text '$text' exists | Then number of elements found by `fieldName(<fieldName>):a->filter.placeholder(<text>)` is equal to `1` |
Then a [$state] field with the name '$fieldName' and placeholder text '$text' exists | Then number of elements found by `fieldName(<fieldName>)->filter.placeholder(<text>).state(<state>)` is equal to `1` |
Then a field with the name '$fieldName' placeholder text '$text' does not exist | Then number of elements found by `fieldName(<fieldName>):a->filter.placeholder(<text>)` is equal to `0` |
Then a [$state] field with the name '$fieldName' exists | Then number of elements found by `fieldName(<fieldName>):a->filter.state(<state>)` is equal to `1` |
Fixed
#3349 [vividus] Fix handling of an attempt to run empty suite
An explicit error is thrown in case of run of empty test suite: InvalidConfigurationException: No batches with tests to execute are configured
#3341 [vividus-plugin-web-app-to-rest-api] Treat RFC-non-compliant URL as assertion failure
Previously invalid URLs break the step and stop it and scenario execution, now the failed assertions is recorded instead.
#3383 [vividus-to-***-exporter] Ignore BeforeStories.json
and AfterStories.json
while parsing output results
BeforeStories.json
and AfterStories.json
files should be skipped while parsing output results since they don't contain information to be exported.