Aurora.Workflows.Tasks.Selenium 0.5.1.23

There is a newer version of this package available.
See the version list below for details.
dotnet add package Aurora.Workflows.Tasks.Selenium --version 0.5.1.23
                    
NuGet\Install-Package Aurora.Workflows.Tasks.Selenium -Version 0.5.1.23
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Aurora.Workflows.Tasks.Selenium" Version="0.5.1.23" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Aurora.Workflows.Tasks.Selenium" Version="0.5.1.23" />
                    
Directory.Packages.props
<PackageReference Include="Aurora.Workflows.Tasks.Selenium" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Aurora.Workflows.Tasks.Selenium --version 0.5.1.23
                    
#r "nuget: Aurora.Workflows.Tasks.Selenium, 0.5.1.23"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Aurora.Workflows.Tasks.Selenium@0.5.1.23
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Aurora.Workflows.Tasks.Selenium&version=0.5.1.23
                    
Install as a Cake Addin
#tool nuget:?package=Aurora.Workflows.Tasks.Selenium&version=0.5.1.23
                    
Install as a Cake Tool

Aurora Workflows

Visual workflow automation for .NET. Compose workflows in a visual designer or with a C# Fluent API, use real C# expressions (Roslyn) for dynamic values, extend the engine with your own task packages, and run workflows headless – in your own process, from a CLI or on a distributed hosting node.

Project website & documentation: https://aurora.unex.me/workflows

What you get

  • Visual designer – drag & drop tasks, wire inputs/outputs, edit expressions, run and debug. Workflows are saved as .awf and published as self-contained .awfc packages.
  • C# expressions – any string task property can be plain text or a C# expression prefixed with = (=Path.Combine(inputDir, fileName)). Workflow variables are available as typed locals inside expressions.
  • Fluent API – build the same workflows in code, run them directly or persist them for the designer.
  • Explicit task contracts – tasks declare inputs and outputs; data flows Input -> Task -> Output instead of through hidden side effects.
  • Extensible – 70+ built-in tasks (control flow, files, HTTP, scripting, mail, JSON, …) plus domain packages (SQL/Data, Windows, IT-Ops, Selenium, Media). Custom tasks are ordinary .NET classes.
  • Headless runtime & hosting – execute workflows without the designer, or publish them to the hosting database for scheduled, distributed execution.

Packages

dotnet add package Aurora.Workflows            # core engine (designer-independent)
dotnet add package Aurora.Workflows.Tasks      # built-in tasks
dotnet add package Aurora.Workflows.Fluent     # Fluent API
dotnet add package Aurora.Workflows.Extensions # load/run published .awfc packages, NuGet resolver, host builder
dotnet add package Aurora.Workflows.Contracts  # contracts/attributes (netstandard2.0)
dotnet add package Aurora.Workflows.UI.Host    # visual designer; F5-debug custom task libraries

Fluent API example

Workflow format v2 rule: plain strings are literals; a value prefixed with = is evaluated as a C# expression. Fluent methods that take an expression (Set, If, Loop, PrintExpression, ReadFileExpression, …) add the marker for you; SetValue, Print, ReadFile, WriteFile store literal text. Workflow variables are referenced by name inside expressions.

using Aurora.Workflows.Fluent;
using Aurora.Workflows.Tasks;

var workflow = FluentWorkflow
    .Create("Nightly Import")
    .TriggerOnSchedule("0 0 2 * * ?")                       // Quartz cron: 02:00 every day
    .SetValue("inputDir", @"C:\data\in")                    // literal text -> variable "inputDir"
    .Set("stamp", "DateTime.Now.ToString(\"yyyyMMdd\")")    // C# expression -> variable "stamp"
    .Do<GetFileListTask>(t => { t.Expression = "=inputDir"; t.Pattern = "*.csv"; })
        .WithOutput("files")                                // task output -> variable "files"
    .If("files.Length == 0",
        then: t => t.Print("Nothing to import."),
        @else: t => t
            .Do<CountCsvRowsTask>()                         // custom task, see below
                .WithInput("files")
                .WithOutput("rowCount")
            .PrintExpression("$\"Imported {rowCount} rows from {files.Length} files ({stamp})\""))
    .Build();

await workflow.StartAsync();

Persist a fluent workflow as JSON and reload it later – or open it in the visual designer:

string json = FluentWorkflow.Create("Persisted").TriggerOnce().Print("ready").Commit().Persist();
var restored = FluentWorkflow.Load(json).Build();

Writing a custom task

A task derives from WorkflowTaskBase (or ExpressionWorkflowTaskBase if it has one primary expression property), declares its inputs and outputs with attributes, reads inputs with GetInput<T>() and publishes results with SetOutput(). Because every string property can be plain text or a = expression (the user decides in the designer), string properties are read through Resolve<T>() rather than used directly.

using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Aurora.Workflows.Contracts;
using Aurora.Workflows.Contracts.Attributes;
using Aurora.Workflows.Tasks;

[WorkflowTaskCategory("Import")]
[WorkflowTaskInputDefinition(typeof(FileInfo[]), IsDefault = true, IsRequired = true,
    Description = "CSV files to inspect.")]
[WorkflowTaskOutputDefinition(typeof(int), IsDefault = true,
    Description = "Total number of data rows across all files.")]
[Description("Counts the data rows of CSV files.")]
public sealed class CountCsvRowsTask : WorkflowTaskBase
{
    // Expression-capable: "true" (plain text) or "=files.Length > 1" (evaluated at runtime)
    [Description("Whether the first line of each file is a header. Plain text or '=' expression.")]
    public string HasHeader { get; set; } = "true";

    public CountCsvRowsTask() { Name = "Count CSV Rows"; }

    protected override Task<bool> DoAsync(IWorkflowDataContext context)
    {
        var files = GetInput<FileInfo[]>(context);            // declared input
        var hasHeader = Resolve<bool>(HasHeader, context);   // text or evaluated expression

        var rows = files.Sum(f => File.ReadLines(f.FullName).Count() - (hasHeader ? 1 : 0));

        SetOutput(context, rows);                            // declared output
        return Task.FromResult(true);
    }

    protected override Task<bool> DoSetupAsync() => Task.FromResult(true);    // before first run
    protected override Task<bool> DoTearDownAsync() => Task.FromResult(true); // on workflow stop
}

Tasks in a referenced assembly are discovered by the designer's toolbox and by hosts that load the package. Scope tasks with children (loops, conditionals) derive from TransactionScopeTaskBase.

Tip: developing custom tasks in a class library? Add a reference to Aurora.Workflows.UI.Host – its build props set the start program so pressing F5 opens the visual designer with your project loaded for interactive debugging.

Headless execution

Run a published .awfc package from your own .NET process (Aurora.Workflows.Extensions):

using Aurora.Workflows;
using Aurora.Workflows.Extensions.Services;

using var managed = new ManagedWorkflow(loggerFactory, new DotNetAssemblyLoaderProxyService(loggerFactory));
managed.Load(File.ReadAllBytes(@"C:\workflows\nightly-import.awfc"), restoreNugetPackages: true);

var context = WorkflowDataContext.Create(managed.GetWorkflow());
context["inputDir"] = @"D:\drop";                           // global workflow variable, e.g. from CLI args

await managed.StartAsync(context);

Or use the CLI runner: Aurora.Workflows.Cli.exe --inputDir="D:\drop" executes the .awfc files in its workflows/ folder. See the documentation for the compiler, runner and workflow hosting: https://aurora.unex.me/workflows/docs/

License

Aurora Workflows is free to use in full for non-commercial projects. For commercial use, please get in touch to discuss licensing terms; redistribution, modification, decompilation, reverse-engineering, or publication of the software without explicit written permission is strictly prohibited.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.5.1.24 32 9/18/2026
0.5.1.23 36 9/18/2026
0.5.1.22 40 9/17/2026
0.5.1.20 52 9/16/2026
0.5.1.19 62 9/16/2026
0.5.1.15 80 9/15/2026
0.5.1.10 83 9/14/2026
0.5.1.4 130 9/7/2026
0.5.1.1 109 9/3/2026
0.4.1.30 99 9/3/2026
0.4.1.29 99 8/27/2026
0.4.1.22 103 8/12/2026
0.4.1.21 110 8/4/2026
0.4.1.20 117 7/23/2026
0.4.1.19 122 7/16/2026
0.4.1.18 129 6/27/2026
0.4.1.16 125 6/26/2026
0.4.1.14 130 5/11/2026
0.4.1.12 126 5/9/2026
0.4.1.11 113 5/6/2026
Loading failed