######Multi-browser support with I.Find
Change from Func<Element> to ElementProxy
######New configuration syntax
Config
.WaitOnAllActions(true)
.WaitOnAllExpects(true)
Config.Configure(settings);
######New settings
WaitOnAllAsserts
OnAssertFailed
ScreenshotPrefix // filename prefix for screenshots, useful in local-scoped config blocks
######Changed settings
ExpectFailedCallback -> OnExpectFailed
WaitOnAllCommands -> WaitOnAllActions
DefaultWaitUntilTimeout -> WaitUntilTimeout
DefaultWaitUntilThreadSleep -> WaitUntilInterval
DefaultWaitTimeout -> WaitTimeout
WaitUntilTimeout Default value 30s -> 5s
######Renamed items
INativeActionSyntaxProvider -> IActionSyntaxProvider
ExpectSyntaxProvider -> AssertSyntaxProvider
ExpectProvider -> AssertProvider
IExpectProvider -> IAssertProvider
######Removed
Settings (replaced by FluentConfig/FluentSettings)
IActionProvider
######New Methods
I.Switch.Window()
I.Switch.Frame()
I.Click(Alert.OK);
I.Click(Alert.Cancel);
I.Expect.Text("Wat").In(Alert.Text);
I.Enter.Text("Wut").In(Alert.Text);
I.Expect.Visible("#id");
I.Assert.Visible("#id");
I.Expect.Not.Visible("#id");
I.Assert.Not.Visible("#id");
I.Expect.Attribute("name").On("#id");
I.Assert.Attribute("name").On("#id");
I.Expect.Attribute("name", "value").On("#id");
I.Assert.Attribute("name", "value").On("#id");
I.Expect.Attribute("name").Not.On("#id");
I.Assert.Attribute("name").Not.On("#id");
I.Expect.Attribute("name", "value").Not.On("#id");
I.Assert.Attribute("name", "value").Not.On("#id");
I.Expect.Css("name").On("#id");
I.Assert.Css("name").On("#id");
I.Expect.Css("name", "value").On("#id");
I.Assert.Css("name", "value").On("#id");
I.Expect.Css("name").Not.On("#id");
I.Assert.Css("name").Not.On("#id");
I.Expect.Css("name", "value").Not.On("#id");
I.Assert.Css("name", "value").Not.On("#id");
I.Expect.Not.Exists("#id");
I.Assert.Not.Exists("#id");
I.Expect.Not.Url("http://google.com/");
I.Assert.Not.Url("http://google.com/");
I.Expect.Not.True(() => false);
I.Assert.Not.True(() => false);
I.Expect.Not.False(() => true);
I.Assert.Not.False(() => true);
I.Expect.Not.Throws() => "".ToString());
I.Assert.Not.Throws(() => "".ToString());
I.Expect.Text("wat").Not.In("#id");
I.Assert.Text("wat").Not.In("#id");
I.Expect.Value("wat").Not.In("#id");
I.Assert.Value("wat").Not.In("#id");
I.Expect.Class("red").Not.On("#id");
I.Assert.Class("red").Not.On("#id");
I.Expect.Count(1).Not.Of("li");
I.Assert.Count(1).Not.Of("li");
######Local-scoped config values
With
.WaitUntil(1)
.WindowSize(800, 600)
.Then
.Wait(3)
.Assert
.Not.Visible("#hiddenthing")
.Not.Exists("#halp");
######Other
EnableStickySession can be called 'blindly' and will not reset sessions in progress. Sessions now properly dispose of browser instances when the AppDomain is unloaded (test runner shutdown, generally).
Exception messages have been cleaned up a bit. Stack traces will stop at user-level test code instead of showing several levels of FluentAutomation abstractions.
Symbols will be uploaded to SymbolSource.org again regularly for the 3.0 series.