SlideShare a Scribd company logo
1 of 78
FUNCTIONAL BROWSER
AUTOMATION TESTING
FOR NEWBS
Bryan Arendt
@ctrlshiftbryan
Canopy F#
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
HISTORY OF BRYAN ARENDT
Commodore 64 + Basic (1989)
Guitar (1995)
OSU (1999)
The Sun (2002)
Quit Day Job (2005)
First Heard of F# (2013)
Code Mash (2016)
THIS TALK
Intro Story
Problem
Why Functional Programming
Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
THE PROBLEM(S)
How do we learn how to be a more
functional programmer(s)?
How do we reduce complexity of
automated browser testing?
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
WHY FUNCTIONAL?
Readability and maintainability
 A function accomplishes a specific task given its arguments. The function does not
rely on any external state
Easier testing and debugging
 They can be tested in isolation
Reduce Code = Reduce Bugs
Easier reiterative development
 the code is easier to refactor, changes to design are often easier to implement
THINKING FUNCTIONALLY
Take parameters Transforms values Returns new values
FUNCTIONAL PROGRAMMING
CONCEPTS
Immutability Expressiveness
Types & Values Pure Functions
FUNCTIONAL PROGRAMMING
CONCEPTS
Immutability Expressiveness
Types & Values Pure Functions
IMMUTABILITY
Values and State cannot be changed once created
Removes side effects
Removes changing state
VALUES INSTEAD OF VARIABLES
Instead of changing the value of an existing variable, create a new
variable with the specified initial value.
In functional programming we bind a value to a name.
FUNCTIONAL PROGRAMMING
CONCEPTS
Immutability Expressiveness
Types & Values Pure Functions
EXAMPLE OF EXPRESSIVENESS
We are going to explore the idea of being terse or expressive.
I’m going to have some help from two people…
“There are only two hard things in Computer Science: cache
invalidation and naming things.”
Phil Karlton
Function f
Var x
UNCLE BOB
NAMES
Variable Names
Variables with large scope should be long, and small scope should be
short. Variables scope should be proportional with their length of
names. Variable names like I and j are just fine if their scope is five
lines long.
Function Names
The longer the scope of a function, the shorter its name should be.
Functions that are called locally from a few nearby places should have
long descriptive names, and the longest function names should be
given to those functions that are called from just one place.
IN FUNCTIONAL PROGRAMMING
Functions are commonly named f
Variables are commonly named x
FUNCTIONAL PROGRAMMING
CONCEPTS
Immutability Expressiveness
Types & Values Pure Functions
TYPES & VALUES
Every function is a value
Every value has a type
Entire programs can be type checked for correctness
PASSING A FUNCTION TO A
FUNCTION
FUNCTIONAL PROGRAMMING
CONCEPTS
Immutability Expressiveness
Types & Values Pure Functions
PURE FUNCTIONS: REMOVING SIDE
EFFECTS
Kris Jenkins – What is Functional Programming?
http://blog.jenkster.com/2015/12/what-is-functional-
programming.html
Two types of inputs and outputs
NORMAL
HIDDEN
“SIDE-EFFECTS ARE THE
COMPLEXITY ICEBERG”
“SIDE-EFFECTS ARE THE
COMPLEXITY ICEBERG”
FUNCTION W/ HIDDEN INPUT
PURE FUNCTION
REVIEW FUNCTIONAL
PROGRAMMING CONCEPTS
Immutability Expressiveness
Types Pure Functions
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
WHY FUNCTIONAL – STORY 1
Rachel Reese
http://rachelree.se/rewriting-from-c-into-f/
I rewrote into F# a super simple data transferring app from C#
C# -> F#
70% less time! - F# 2 minutes
25% less code! – 140 lines to 103
Bug - processing tremendously more data than needed (F# made this
apparent)
Bug Couple Hours -> 7 Minutes – fixing C#
WHY FUNCTIONAL – STORY 2
Does the Language You Use Make a Difference (revisited)?
http://simontylercousins.net/does-the-language-you-use-make-a-
difference-revisited/
Simon Tyler Cousins @simontcousins
WHY FUNCTIONAL – STORY 2
Develop an application to evaluate the revenue due from Balancing
Services contracts
Existing solution implemented in C#
PROBLEMS
not all of the contracts had been implemented – too complex
hard to maintain the large code base
impossible to test without live data
low confidence in the numbers it produced
failed to evaluate the contracts in near-real-time
DESIGN PRINCIPLE
Stay safe, Stay functional.
In particular, we have an immutable domain model and persistence
store. Pure functions are used to work with this domain model.
Simon Tyler Cousins @simontcousins
HOW CAN WE ALL DO THIS?
How can we convince this guy?
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
F#
Mostly Functional
Leverage .Net Environment
We can call a compiled C# .Net program or library from F# very easily
Nuget!
C# MOST POPULAR FEATURES
Generics / Type parameterization
Lambda Expressions
Delegates
Type Inference (limited)
F#
Functional Imperative
Haskel,
OCaml
F# C# C
Multi-paradigmFunctional Imperative
MIXED PARADIGM LANGUAGES
If C# is a object oriented language that supports and includes some
functional concepts
F# in the inverse.
Then F# is a functional language that supports object oriented
concepts
LOOKING FOR AN EXCUSE TO USE
F#
CANOPY - F#RICTIONLESS WEB TESTING
one goal in mind, make UI testing simple:
• Solid stabilization layer built on top of
Selenium.
• Quick to learn. Even if you've never done UI
Automation, and don't know F#.
• Clean, concise API.
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
WHY AUTOMATED TESTING?
Regression
Test More Like A User (High Level)
Combinatorial Testing
Exact Requirements
Many Browsers
WHAT IS SELENIUM?
A Unified API for Browsers
WebDriver
Server/Grid
IDE (For Recording)
SELENIUM ARCHITECTURE
Library- [C#][Ruby][Java][Python][...]
 Navigate to a Page
 Send Keystroke
 Click on Elements
 Read Information
WebDriver API Rest Based Web Service
WebDriver Executable
 translates API calls
 each browser has its own web driver
 Chrome and IE each have separate executables
 Firefox and PhantomJS are built-in
THIS TALK
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
CANOPY F#
Canopy F# .Net C# Nuget
WebDriver
REST Api
WebDriver
Executable
CANOPY
Actions
Assertions
Testing
Configuration
Reporting
OPEN LIBRARIES AND START A
BROWSER
DEFINE A TEST
THE &&& FUNCTION
INFIX FUNCTION
Prefix notation: + 3 4
Infix notation: 3 + 4
NO BRACES
ASSERTION FUNCTIONS
PATTERN MATCHING
Common.fs
Login.fs
THIS TALK RECAP
Intro Story
Problem
Why Functional Programming & Functional Concepts
Why Functional Stories
F#
Selenium & Why Automated Testing
Canopy
LEARN MORE
LEARN MORE
http://fsharpforfunandprofit.com/
http://fsharpforfunandprofit.com/series/low-risk-ways-to-use-
fsharp-at-work.html
FUNCTIONAL PROGRAMMING @
CODEMASH
Programs that Write Programs: How Compilers Work
 Thursday 4:45 PM Indigo Bay
Functional Programming Basics in ES6
 Thursday 4:45 PM Zambezi
A Developer’s Journey from Object Oriented to Functional
Programming
 Friday 11:00 AM Zambezi
Erlang, or How I Learned to Stop Worrying and Let Things Fail
 Friday 2:45 PM Orange

More Related Content

Similar to Functional Browser Automation Testing for Newbs

Why functional programming in C# & F#
Why functional programming in C# & F#Why functional programming in C# & F#
Why functional programming in C# & F#Riccardo Terrell
 
Functional Programmer's Starter Kit
Functional Programmer's Starter KitFunctional Programmer's Starter Kit
Functional Programmer's Starter KitGarreth Dottin
 
Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#Kevin Avignon
 
React For Vikings
React For VikingsReact For Vikings
React For VikingsFITC
 
10 Tips for Configuring Your Builds with Bamboo Specs
10 Tips for Configuring Your Builds with Bamboo Specs10 Tips for Configuring Your Builds with Bamboo Specs
10 Tips for Configuring Your Builds with Bamboo SpecsAtlassian
 
Test Driven Design
Test Driven DesignTest Driven Design
Test Driven DesignSaad Ahmed
 
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Lemi Orhan Ergin
 
Bay NET Aug 19 2009 presentation ppt
Bay  NET Aug 19 2009 presentation pptBay  NET Aug 19 2009 presentation ppt
Bay NET Aug 19 2009 presentation pptArt Scott
 
Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...
Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...
Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...J On The Beach
 
Functional programming in TypeScript
Functional programming in TypeScriptFunctional programming in TypeScript
Functional programming in TypeScriptbinDebug WorkSpace
 
Xcore meets IncQuery: How the New Generation of DSLs are Made
Xcore meets IncQuery: How the New Generation of DSLs are MadeXcore meets IncQuery: How the New Generation of DSLs are Made
Xcore meets IncQuery: How the New Generation of DSLs are MadeIstvan Rath
 
Succeeding with Functional-first Programming in Enterprise
Succeeding with Functional-first Programming in EnterpriseSucceeding with Functional-first Programming in Enterprise
Succeeding with Functional-first Programming in Enterprisedsyme
 
Setting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile AppSetting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile AppNaresh Jain
 
A journey to_be_a_software_craftsman
A journey to_be_a_software_craftsmanA journey to_be_a_software_craftsman
A journey to_be_a_software_craftsmanJaehoon Oh
 
F# for startups
F# for startupsF# for startups
F# for startupsjoelgrus
 
Selenium training-course-content-syllabus-credo systemz
Selenium training-course-content-syllabus-credo systemzSelenium training-course-content-syllabus-credo systemz
Selenium training-course-content-syllabus-credo systemzTraining Institute
 
Evolutionary Design Solid
Evolutionary Design SolidEvolutionary Design Solid
Evolutionary Design SolidSai Venkat
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekDr. Felix Raab
 

Similar to Functional Browser Automation Testing for Newbs (20)

Why functional programming in C# & F#
Why functional programming in C# & F#Why functional programming in C# & F#
Why functional programming in C# & F#
 
Functional Programmer's Starter Kit
Functional Programmer's Starter KitFunctional Programmer's Starter Kit
Functional Programmer's Starter Kit
 
Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#
 
React For Vikings
React For VikingsReact For Vikings
React For Vikings
 
10 Tips for Configuring Your Builds with Bamboo Specs
10 Tips for Configuring Your Builds with Bamboo Specs10 Tips for Configuring Your Builds with Bamboo Specs
10 Tips for Configuring Your Builds with Bamboo Specs
 
Test Driven Design
Test Driven DesignTest Driven Design
Test Driven Design
 
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016
 
Bay NET Aug 19 2009 presentation ppt
Bay  NET Aug 19 2009 presentation pptBay  NET Aug 19 2009 presentation ppt
Bay NET Aug 19 2009 presentation ppt
 
Practical F#
Practical F#Practical F#
Practical F#
 
Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...
Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...
Learn how to build Functional Reactive Applications with Elm, Node.js and Inf...
 
Functional programming in TypeScript
Functional programming in TypeScriptFunctional programming in TypeScript
Functional programming in TypeScript
 
Xcore meets IncQuery: How the New Generation of DSLs are Made
Xcore meets IncQuery: How the New Generation of DSLs are MadeXcore meets IncQuery: How the New Generation of DSLs are Made
Xcore meets IncQuery: How the New Generation of DSLs are Made
 
Succeeding with Functional-first Programming in Enterprise
Succeeding with Functional-first Programming in EnterpriseSucceeding with Functional-first Programming in Enterprise
Succeeding with Functional-first Programming in Enterprise
 
Setting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile AppSetting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile App
 
soa
soasoa
soa
 
A journey to_be_a_software_craftsman
A journey to_be_a_software_craftsmanA journey to_be_a_software_craftsman
A journey to_be_a_software_craftsman
 
F# for startups
F# for startupsF# for startups
F# for startups
 
Selenium training-course-content-syllabus-credo systemz
Selenium training-course-content-syllabus-credo systemzSelenium training-course-content-syllabus-credo systemz
Selenium training-course-content-syllabus-credo systemz
 
Evolutionary Design Solid
Evolutionary Design SolidEvolutionary Design Solid
Evolutionary Design Solid
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one week
 

Recently uploaded

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...masabamasaba
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 

Recently uploaded (20)

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 

Functional Browser Automation Testing for Newbs

Editor's Notes

  1. Ever since I was 10 I knew I wanted to be a software developer. Probobably not too different from a lot of people in this. Room. In addition to loving programming I had a hobby of playing guitar in bands. Moved to OSU music introduced me to people. Programming did not. Played in different bands and made musician friends. Joined a band with some friends of previous bands, moved to LA and got signed by Warner Brothers. Still did some programming in things like flash.
  2. Is this good naming? The conventional thought is No. http://blog.ploeh.dk/2015/08/17/when-x-y-and-z-are-great-variable-names/
  3. Some of you have Some haven’t
  4. Remove noise. This is a much more expressive way of conveying the same information. So when you here that F# is expressive think of this. Don’t we want to do the same things with our programming?
  5. Show module 3
  6. Bill Lumbergh
  7. Bill Lumbergh
  8. Canopy is our excuse
  9. This is canopy’s “Hello World”