nexial-core 4.1 (2021-08-14)
Release 4.1
2021-08-14
General
Fixes
- minor console logging formatting
- fix error when retrieving profile-based variable set from a macro
- updated batch files (nexial-script-update, nexial-artifact-repair & nexial-variable-update) for downloading the nexial-lib-x.x.zip
- address recent issue on *NIX/MAC system where the
/tmp
directory cannot be clean up due to permission
Improvements
- support Java 16
- adjustments for older Java (pre Java 11)
- enhancements to Execution Summary to show/hide timing and pass/fail information.
- minor stylesheet update for email notification template.
- Nexial build size has been reduced by extracting some jars into nexial-lib-1.0.zip this will be downloaded by nexial automatically.
- Batch file
nexial-lib-downloader
has been added to download nexial-lib-x.x.zip file manually.- minor fixes applied to ensure successful downloading of support lib zip file.
Batch Files
nexial-project
: support automatic creation of project directory, when a fully qualified path is specified.
Interactive
- minor adjustment to render activity listing correctly
Expressions
- WEB »
check(locator)
: NEW operation to ensure a checkbox is checked - WEB »
uncheck(locator)
: NEW operation to ensure a checkbox is unchecked - rewrote parsing logic for expression in order to support parameter values that contains
(
,)
,[
, and]
.- it is now possible to nest parenthesis (
(
and)
) and square brackets ([
and]
) within expression operations.
- it is now possible to nest parenthesis (
- implemented special parameter delimiter - ` %%
- to handle situations where comma (
,`) is used as part of the parameter itself. This special parameter delimiter allows user to use commas freely as part of the parameter value. - TEXT »
swapCases
: NEW operation to swap letter cases.
desktop commands
- added more meaningful error messages for explicit wait
- added auto-retry logic
- autoscanning: code fixes to continue with autoscanning when an error occurred due to component not being active or mis-configured.
- remove over-zealous trimming of component text during editing of a textbox/textarea component.
- HierTable support:
- auto scrolling for HierTable to bring offscreen rows into view (currently only support Infragistics4 UI):
- allow “extra” section of a HierTable element to be loaded more dynamically
- reformat multi-line column headers as single line to better support assertions and data comparison
- code fix to eliminate unwanted exceptions
macro commands
produce
: allow a data variable generated in within a macro to be exposed to the calling script directly via its data variable name.
mobile commands
- alpha build for local mobile test automation support.
- documentation forthcoming (please be patient).
- current implementation requires user to install android studio, android sdk, platform-tools, AVD manager, any Android emulators, and Appium Desktop BEFORE using Nexial’s mobile automation feature.
- additional profile configuration for added:
.orientation
.geoLocation
.server.url
.server.address
.server.logging
- Appium support:
- fix the shutdown sequence of appium server when Nexial is terminating execution
- support externalizing the Appium’s log during execution (
log/appium.log
under the output directory) - support both external appium server integration and auto-start appium server during Nexial execution
- improved Android setup script to install Android SDK and emulators
- alpha-ready: Android setup script will now
- install Android SDK to
~/.nexial/android/sdk
- install Android system images (user selects)
- install Android emulators with skins (user selects)
- create batch files to start emulators
- install Android SDK to
- added support for MacOS shell scripts
- added common utility batch files to
${NEXIAL_HOME}/bin/mobile
- alpha-ready: Android setup script will now
- auto-resolves the location of Appium Server startup script (
main.js
) - auto-resolves the location of NodeJS executable (
node
) - correctly sending the correct time unit for
newCommandTimeout
capability.
assertCount(locator,count)
: NEW command to assert the occurrence of specified locator.assertElementsPresent(prefix)
: NEW command to assert the presence of a series of locators.assertElementVisible(locator)
: NEW command to assert that the element referenced by the specifiedlocator
is both present and visible on current screen.assertLocked()
: NEW command to assert that the target device is currently locked.assertTextPresent(locator,text)
: NEW command to assert that an element contains the specified text.- scan across all matching elements (not just the 1st one) for text content assertion.
back()
: NEW command to navigate back to previous screen.clickByDisplayText(text)
: NEW command to click an element based on its text. improved implementation to handle text with single and/or double quotes.closeApp()
: implementation change to ONLY close the specified application of current mobile profile.doubleClick(locator,xOffset,yOffset)
: NEW command to simulate double-click action on specified locator.forward()
: NEW command to navigate forward from current screen (after navigated back to previous screen)hideKeyboard
: NEW command to key on-screen keyboard- add auto-hiding of on-screen keyboard via
nexial.mobile.hideKeyboard
System variable.
- add auto-hiding of on-screen keyboard via
home()
: NEW command to navigate to current device’s “HOME” screen.lock()
: NEW command to lock current device.longClick(locator,waitMs)
: NEW command to simulate long-click action on a device; generally used to evoke context menu or popup menu.recentApps
: NEW command to show recently opened (and still running) apps on current device.saveCount(var,locator)
: NEW command to save the number of matching elements tovar
.saveLockStatus(var)
: NEW command to save current device lock status (LOCKED
orUNLOCKED
) tovar
.saveText(var,locator)
: NEW command to save the text of the referenced element tovar
.saveTextArray(var,locator)
: NEW command to save the text of all matching elements as an array (or list) tovar
.screenshot(file,locator)
: now support “output-to-cloud” functionality, which is toggled via thenexial.outputToCloud
System variable.- improved stability and performance.
scroll(locator,direction)
: added more fine-grained scroll increments- fix code to properly scroll in all 4 directions.
select(locator,item)
: NEW command to select an item from a dropdown.- code fix to accurately select items that are not immediately visible on-screen.
sendSms(phone,message)
: NEW command to send SMSmessage
to specifiedphone
number.shake()
: NEW command to simulate shaking the current device (iOS only), which could trigger other event.shutdown(profile)
: NEW command to shut down any running emulator and Appium server instance.type(locator,text)
: now supports clearing out text (iftext
is(empty)
).- fix code to allow time for the onscreen keyboard to render.
- improved stability and performance.
waitForElement(locator,waitMs)
: wait until the target element is found before continuing execution.unlock()
: NEW command to unlock current device. By default, no password is placed on emulator. For unlocking a device with passcode or pattern, visit Appium Desired Capability and search forunlockType
andunlockKey
.- Locator support:
- now supports a variety of locators via unique prefixes:
id=...
: ID-based locator.xpath=...
: XPATH-based locator. Note that thexpath=
prefix not required since XPATH locators are fairly easy to recognizea11y=...
: accessbility id-based locator.class=...
: class-based locator.res=...
: resource id-based locator, which is an alias to ID-based locator.predicate=...
: predicate-based locator. Note that this is for iOS device only.cc=...
: class chain-based locator. Note that this is for iOS device only.name=...
: name-based locator, which is an alias to ID-based locator. Note that this is for iOS device only.
- fix code to support both implicit and explicit wait strategy.
text=...
: NEW locator type to simplify automation.nearby=...
: NEW locator type to simplify the task of identifying elements that are adjacent to label or text element.
- now supports a variety of locators via unique prefixes:
- automatically add
scenarioRef
for the mobile device used in automation.
rdbms commands
- update multiple database drivers to newer version for better product support
localdb commands
- localdb driver (sqlite) configuration has been removed from
build.gradle
and it has been configured to download it automatically while using localdb command for the first time
sound commands
play(audio)
: update all sound files to MP3 (instead of WAV) to reduce footprintplay(audio)
: it will download and play the audio files from${user.home}/.nexial/sound/
web commands
waitForPopUp(winId,waitMs)
: FIXED to support both window name and window index. Also, the target window will be selected (meaning: switched to) when it is detected within the specified max time.- added more meaningful error messages for explicit wait
click(locator)
: better “find element” strategy for click target- avoid “double-highlighting” caused by nested command calls
- highlighting improvement made to reduce styling conflicting against AUT
type(locator,value)
: minor logging improvements for clarity- Support
SELECT
element on extracting the text of the selected option. close
: also shut down underlying webdriver if the last browser window is closed.selectDropdown(locator,optLocator,optText)
: NEW command to select an option from a dropdown component.waitForElementTextPresent(locator,text)
: NEW command to wait for the presence of an element that matches both the specifiedlocator
and specifiedtext
.- disable native screenshot when executing under headless environment (not supported)
- disable native DnD when executing under headless environment (not supported)
waitWhileElementNotPresent(locator,waitMs)
: NEW command to ensure that a specific element is not present within a fixed amount of time.- code fix to prefer the
waitMs
parameter overnexial.pollWaitMs
value.
- code fix to prefer the
- additional settings to speed up and stabilize chrome browser during automation, esp. in headless mode.
assertElementNotPresent(locator,maxWaitMs)
: addedmaxWaitMs
to custom amount of time to wait.- slight adjustment for all
waitUntil...
andwaitFor...
commands to improve stability by adjusting between-check wait time from 10 to 25 ms. - disable the use of GPU when running Chrome Headless.
nexial.web.useReact
: NEW System variable for improved support on React applications.
webmail commands
attachment(profile,id,attachment,saveTo)
: NEW command to download an attachment associated with an email identified byid
and save it locally tosaveTo
.attachments(profile,id,saveDir)
: NEW command to download all the attachments associated with an email identified byid
and save them locally tosaveDir
(directory).- code fix for the obscure condition where the attachment file name contains path information.
ws commands
upload(url,body,fileParams,var)
:- additional logging enabled via the
nexial.verbose
System variable. - honoring the Content-Type header defined in preceding
header(name,value)
command(s). - support content type with charset.
- further customization and control via
nexial.ws.multipart.charset
andnexial.ws.multipart.spec
System variables.
- additional logging enabled via the
graphql(url,body,var)
: NEW command to support GraphQA request automation- code fix to stabilize and enhance web service logging.
- prevent default content type to be sent as a part of a GET request header; GET request, per spec, does not require
any
Content-Type
header.