Skip to content

Instantly share code, notes, and snippets.

@ryansroberts
Created October 14, 2013 12:35
Show Gist options
  • Save ryansroberts/6974914 to your computer and use it in GitHub Desktop.
Save ryansroberts/6974914 to your computer and use it in GitHub Desktop.
public class Mutations
{
readonly BrowserSession session;
public Mutations(BrowserSession session)
{
this.session = session;
}
public Action ClickOnAnElement(string css, int ms = 200)
{
return () => session.FindCss(css, ms == 0 ? null : new Options() { Timeout = TimeSpan.FromMilliseconds(ms) });
}
}
public class Postconditions
{
readonly BrowserSession session;
public Postconditions(BrowserSession session)
{
this.session = session;
}
public Action None = () => { };
public Action ShouldHaveCss(string selector, int ms = 200)
{
return () => session.HasCss(selector, ms == 0 ? null : new Options() { Timeout = TimeSpan.FromMilliseconds(ms) });
}
}
public static class InteractionExtensions
{
public class Interaction
{
public BrowserSession session;
public Action Mutation;
public Action PostCondition;
public Interaction(BrowserSession session,Action mutation,Action postcondition)
{
this.session = session;
Mutation = mutation;
PostCondition = postcondition;
}
public void Execute()
{
session.RetryUntilTimeout(() =>
{
Mutation();
PostCondition();
});
}
}
public static void Interact(this BrowserSession session, Func<Mutations,Action> mutation,Func<Postconditions,Action> postcondition)
{
var interaction = new Interaction(session,
mutation(new Mutations(session)),
postcondition(new Postconditions(session)));
interaction.Execute();
}
public static void Syntax()
{
var session = new BrowserSession();
session.Interact(when => when.ClickOnAnElement(".some.thing"),
then => then.ShouldHaveCss(".something.happened.we.can.see"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment