Boa Constrictor is released publicly as the Boa.Constrictor NuGet package on NuGet.org. This file documents all notable changes to the project for each NuGet package release.
This file's format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added unit tests for Question that derive from
AbstractWebPropertyQuestion
- Added Discord server invitation links to README and docs
- Added
UploadFile
WebDriver Task - Added user guide: "Calling Tasks Safely"
- Added and refined GitHub templates for issues and pull requests
- Added user guide: "Writing Actor Extension Methods"
- Added user guide: "Caching Answers"
- Reformatted section titles in Testing user guides
- Added supression for RestSharp 'Parameter is Obsolete' warnings
- Added ICacheableQuestion interface implementation to RestApiDownload (Equals and GetHashCode)
- Added unit tests for Question that derive from
AbstractWebQuestion
- Added unit tests for Question that derive from
AbstractWebLocatorQuestion
- Added utility for wrapping logging of long messages with name
MessagesWrapper
.
- Updated Fluent Assertions dependency to 6.1.0
- Restructured projects for
docs
,logos
, andtalk
- Renamed
JavaScriptProperty
toDomProperty
Classes
Question will return empty array if class attribute returns null
- [Experimental] Added async programming to Boa Constrictor
- Interactions have async versions:
IInteractionAsync
IQuestionAsync
ITaskAsync
IActor
has "Async" methods to call async Interactions
- Interactions have async versions:
- Added additional badges from Shields.io to the README.md
- Added ToString methods for Questions that didn't have them
- Reformatted task and question when they're referring to interactions
- Reformatted actor and ability when they're referring to Screenplay items
- Updated Selenium WebDriver packages to 4.0
- Standardized existing ToString methods for Questions
- Fixed CodeQL warnings in GitHub Action
- Fixed some Question summary descriptions
- Added README to NuGet package
- Added user guide: "Testing with xUnit.net"
- Replaced symbols package with embedded debugging
- Added ToString methods for Tasks that didn't have them
- Added user guide groundwork to the doc site
- Added documentation stating that Boa Constrictor is not limited to small-scale projects
- Added user guide: "Testing with NUnit"
- Added user guide: "Testing with SpecFlow"
- Added ability for
Wait
to handle multiple pairs ofIQuestion
andICondition
pairs using boolean operators
- Standardized existing ToString methods for Tasks
- Added
SafeActions
for:- Running
Action
objects - Catching any exceptions
- Throwing the exceptions later as a combined
SafeActionsException
- Running
- Added Screenplay support for running Tasks using
SafeActions
- The
RunSafeActions
Ability holds aSafeActions
object - The
Safely
Task calls another task using the Ability
- The
- Added WebDriver task
RightClick.On(webElement)
- Added WebDriver task
DoubleClick.On(webElement)
- Added WebDriver task
Check.On(webElement)
/Check.Off(webElement)
for interacting with Checkboxes, Radio Buttons, etc. - Added WebDriver task
Drag.AndDrop(webElement)
for dragging the mouse from one WebElement to another - Added IsNullOrWhitespace Condition
- Updated RestSharp package version to fix security vulnerability
- Updated NUnit and other unit test package versions
- Gemfile: required
addressable >= 2.8.0
to fix security vulnerability - Removed execution of
codeql-analysis.yml
from cron
- Added new Conditions for
IEnumerable
objects - Reorganized Condition folders
- Added overloaded for
Actor.AttemptsTo(...)
that accepts multiple Tasks asparams
- Added Applitools webinar to doc site videos pages
- Updated AbstractComparison constructor to protected
- Updated doc site Gemfile dependency versions
This is Boa Constrictor's 1.0 Release! It does not contain any changes from 0.14.0. Setting the version to 1.0 signals that the current code is "good" and will be supported. You should not be hesitant to use 1.0 because its code has been hardened for months.
- Added
ChangeWebDriver
Task for changingBrowseTheWeb
's WebDriver - Added more Boa Constrictor logo assets under the
logos
directory - Added Boa Constrictor PowerPoint master slide deck
- Added Boa Constrictor talk slides and script
- Removed unused logo image assets from the doc site
- Changed a few of the images used in the doc site
- Set the NuGet package icon to the new Boa Constrictor logo
- Added Boa Constrictor logo and updated docs
- Improved
SendKeys
text clearing logic
- Added official documentation!
- Hosting: GitHub Pages at https://q2ebanking.github.io/boa-constrictor/
- Static site generator: Jekyll
- Theme: Minimal Mistakes
- Added REST APIs to the tutorial and example project
- Moved
Rest
DownloadUsing
andRequestUsing
build methods to a new type-genericRest<TAbility>
class - Updated NuGet package versions
- Removed "NonParallelWorker" from
Names.ConcatUniqueName
return values
- Moved content from root-level Markdown files to the doc site
- Removed much of the
README
content - Deleted files for tutorials, code of conduct, and contributing
- Removed much of the
- Enabled
IRestClient
objects to be directly injectable intoAbstractRestSharpAbility
and its child classes
- Added
ICacheableQuestion
as an interface for Questions that can be cached - Updated
AnswerCache
and related classes to useICacheableQuestion
instead ofIQuestion
- Updated WebDriver-based Questions to implement
ICacheableQuestion
- Added Screenplay answer cache
AnswerCache
stores answers to Questions using the Question object as the keyCacheAnswers
is the Ability that enables Actors to useAnswerCache
CachedAnswer
returns a cached answer for a Question or calls the Question to store its answer
- Added
Equals
andGetHashCode
methods to all WebDriver interactions so they can work withAnswerCache
- Added
Equals
andGetHashCode
methods toWebLocator
- Added
Id
builder method toWebLocator
- Added body data to
RequestData
for dumping RestSharp requests
- Refactored
HtmlAttribute
andHtmlAttributeList
interactionsIdAttribute
/IdAttributeList
ValueAttribute
/ValueAttributeList
- Added several new Questions to return lists of requested string values from multiple elements found by a locator
- Additions include
CssValueList
,HtmlAttributeList
,IdAttributeList
- New Questions (and existing
TextList
) implement new extensionElementLists.GetValues()
- Added .NET 5 support!
Boa.Constrictor
targets both .NET 5 and .NET Standard 2.0Boa.Constrictor.Example
targets .NET 5 exclusivelyBoa.Constrictor.UnitTests
targets .NET 5 exclusively
- Removed "file:" from screenshot and artifact relative links in the test log report HTML file
- Added
TestLogReportDumper
to combineTestLogData
objects into one pretty HTML report - Refactored
AbstractDumper
to share more parts
TestLogData
now has aResult
property for storing the test resultTestLogData
's properties are all now public to get but remain private to setTestLogger
now has aLogResult
method for logging the test result
- Added
TestLogger
for dumping JSON files with test steps, messages, and test artifact files
- Added
WaitsUntil
extension method toIActor
for more concise waiting calls - Updated all interactions and the tutorial to use
WaitsUntil
- Added the
RequestDumper
class to automatically store the last request and response objects - Added
LastRequest
andLastResponse
properties toIRestSharpAbility
to more conveniently access these values from the dumper
IRestSharpAbility
now usesRequestDumper
instead ofJsonDumper
to dump requests and responses
This release contains major changes to RestSharp Screenplay support. Changes are not backwards-compatible.
-
Previously, there was one Ability named
CallRestApi
that could hold multipleIRestClient
RestSharp client objects. Each RestSharp Interaction would need a base URL as an input, and it would look up the appropriate client object from the Ability. However, this was not the best design because it required each call to include a base URL, which led to repetitive code. -
Now, there can be multiple Abilities for calling REST APIs using RestSharp. One RestSharp Ability has only one
IRestClient
object. Users should write their own Ability class for each base URL they want to use.IRestSharpAbility
provides the interface for RestSharp Abilities, with properties and methods for clients, dumpers, and cookies.AbstractRestSharpAbility
implements most of the pieces fromIRestSharpAbility
. Custom RestSharp Abilities should either implementIRestSharpAbility
or extendAbstractRestSharpAbility
. TheCallRestApi
Ability still exists as a "common" or "default" RestSharp Ability. It extendsAbstractRestSharpAbility
. -
All RestSharp interactions have been updated with a generic type parameter for an
IRestSharpAbility
Ability. This type parameter dictates which Ability will be used by the interaction, thus determining the RestSharp client and thereby the base URL. For simplicity, theRest
static class's builder methods now each have two versions: one with a type generic to specify the RestSharp Ability, and one without a type generic that usesCallRestApi
as a "default" Ability. -
RestSharp interactions for cookies have been removed because they simply made changes to the
IRestClient
object instead of performing real interactions. They have been replaced byIRestSharpAbility
methods. -
RestSharp interactions for calling requests and downloads have also changed significantly.
RestApiResponse
has been renamed toRestApiCall
for readability.RestFileDownload
has been renamed toRestApiDownload
for consistency. Both no longer have in-class builder methods. Instead, theRest
class holds the only public builder methods for them. You must use theRest
class to instantiate them. Both also now share a parent class namedAbstractRestQuestion
.
Examples of new RestSharp interactions:
IActor actor = new Actor();
// Simple "default" RestSharp client calls
actor.Can(CallRestApi.At("www.somebaseurl.com"));
IRestRequest request = new RestRequest(...);
IRestResponse response = actor.Calls(Rest.Request(request));
// Custom RestSharp client calls
// Assume `CallOtherApi` is a class that implements `IRestSharpAbility`
// Assume `DataObject` is a deserialization class
actor.Can(CallOtherApi.At("www.someotherapi.com"));
IRestRequest request2 = new RestRequest(...);
IRestResponse<DataObject> response2 = actor.Calls(Rest.RequestUsing<CallOtherApi, DataObject>(request2));
- Added the
Rest
class to provide more fluent builder methods for RestSharp Questions
- Added dumpers under
Boa.Constrictor.Dumping
- Added dumpers for RestSharp requests/responses and file downloads to the
CallRestApi
Ability
- Refactored RestSharp interactions to use dumpers
RestApiResponse
andRestFileDownload
no longer directly take in output directories for dumps- Moved RestSharp serialization classes into their own files
- Standardized access levels for properties of RestSharp-based interactions
- Removed
AbstractRestQuestion
,AbstractRestTask
, andRequestLogger
- Added
Calls
methods toIActor
interface for calling both Tasks and Questions
- Replaced
JavaScriptCall
andJavaScriptElementCall
withJavaScript
- Updated NuGet packages used by unit tests
- Added
nuget-push.xml
toGitHub Actions
solution folder - Added
StaleElementReferenceException
retries to Web locator tasks
- Created a GitHub Action named
nuget-push.yml
to automatically publish the Boa.Constrictor NuGet package to NugGet.org when the project version changes.
- Fixed namespace for
SwitchWindowToLatest
Task. - Fixed broken README link.
- Fixed
Names.ConcatUniqueName()
for when the current thread's name isnull
.
- Removed the
Names.GetCurrentThreadName()
method.
- Created a GitHub Action to automatically run unit tests for every pull request.
- Created a solution folder for GitHub Action .yml files.
- Recorded a Boa Constrictor intro video and linked it in the README.
- Added
CONTRIBUTING.md
as the new guide for project development and contributions. - Added
CHANGELOG.md
as the project changelog file.
- Improved README text.
- Moved "Guidelines for Contribution" from
README.md
toCONTRIBUTING.md
.
- Configured NuGet package to share XML docs using
GenerateDocumentationFile
in .csproj file. - Corrected typos in README and XML docs.
- Removed
IsDateAsString
Condition.
- Released the package a second time to resolve minor delivery pipeline issues.
- No code changes.
- Released the package via PrecisionLender's new internal delivery pipeline.
- No code changes.
- Initial public release of the Boa.Constrictor NuGet package (uploaded manually).