This document discusses different styles for writing automated tests using the Behavior Driven Development (BDD) methodology. It compares the traditional "xUnit" style to two BDD styles using Gherkin syntax and step definitions. It also discusses enhancing xUnit tests with page object patterns and Allure reporting to make the tests more readable and provide detailed reports. The document advocates an approach using xUnit with page objects and Allure reporting as a better alternative to adding extra layers for Gherkin step definitions when the requirements are already automated tests.
Presentation about JDI on Selenium Camp 2017 by Roman Iovlev
http://seleniumcamp.com/talk/test-ui-with-jdi-easy-simple-and-good/
JDI is a very powerful framework based on Selenium which realizes UI Objects (PageObjects + Typified elements) design pattern. We talked enough about it previous year on different conferences and want to do practical session this time, so each attendee could see how JDI helps to write test automation code faster and more clear, making test engineers to use best practices in test automation.
The document provides information about HTML forms and JavaScript. It includes examples of HTML form fields like text, password, checkbox, radio buttons, and submit buttons. It also discusses how JavaScript can be used to validate form data, submit forms, and perform calculations. The last part discusses AJAX and how JavaScript and XMLHttpRequest object can be used to make asynchronous calls to retrieve and display data without reloading the page.
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperJon Kruger
Â
This document contains information about Ruby on Rails and comparisons to .NET from an independent consultant. It includes code samples in both Ruby on Rails and C#/.NET, as well as recommendations for learning resources. Quotes from developers discuss benefits of Ruby like test-driven development and less restrictive coding.
This document provides an introduction to jQuery, including what jQuery is, how it works, getting started, core concepts, selectors, manipulation, traversal, events, and more. Some key points covered include:
- jQuery is a JavaScript library that simplifies HTML/JavaScript interaction and provides DOM manipulation and event handling.
- jQuery uses CSS selector syntax to select elements and a method chain structure for fluent programming.
- Common uses include selecting elements, modifying styles/content, traversing/manipulating the DOM, and handling browser events.
- jQuery handles cross-browser inconsistencies and speeds up development of interactive elements and AJAX applications.
РОПан ĐОвНов ÂŤOpen Source UI Automation Tests on C#ÂťSpbDotNet Community
Â
The document discusses open source UI automation for C# using the JDI framework. It introduces JDI elements including simple elements like buttons and text fields, complex elements like dropdowns and tables, and composite elements like pages, sites and forms. It also discusses entity-driven testing where tests are data-driven by providing entity objects to manipulate page elements and assert results.
An idea of how to make JavaScript testable, presented at Stir Trek 2011. The world of JavaScript frameworks has changed greatly since then, but I still agree with the concepts.
The document describes how to create an Android app that allows users to create an account and log in using a SQLite database. The app includes activities for sign up and login. The sign up activity allows creating a new user account by inserting data into a database table. The login activity authenticates users by querying the database and checking the password. The database is implemented using a DatabaseHelper class to manage creating and upgrading the database, and a LoginDatabaseAdapter class for performing CRUD operations.
Presentation about JDI on Selenium Camp 2017 by Roman Iovlev
http://seleniumcamp.com/talk/test-ui-with-jdi-easy-simple-and-good/
JDI is a very powerful framework based on Selenium which realizes UI Objects (PageObjects + Typified elements) design pattern. We talked enough about it previous year on different conferences and want to do practical session this time, so each attendee could see how JDI helps to write test automation code faster and more clear, making test engineers to use best practices in test automation.
The document provides information about HTML forms and JavaScript. It includes examples of HTML form fields like text, password, checkbox, radio buttons, and submit buttons. It also discusses how JavaScript can be used to validate form data, submit forms, and perform calculations. The last part discusses AJAX and how JavaScript and XMLHttpRequest object can be used to make asynchronous calls to retrieve and display data without reloading the page.
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperJon Kruger
Â
This document contains information about Ruby on Rails and comparisons to .NET from an independent consultant. It includes code samples in both Ruby on Rails and C#/.NET, as well as recommendations for learning resources. Quotes from developers discuss benefits of Ruby like test-driven development and less restrictive coding.
This document provides an introduction to jQuery, including what jQuery is, how it works, getting started, core concepts, selectors, manipulation, traversal, events, and more. Some key points covered include:
- jQuery is a JavaScript library that simplifies HTML/JavaScript interaction and provides DOM manipulation and event handling.
- jQuery uses CSS selector syntax to select elements and a method chain structure for fluent programming.
- Common uses include selecting elements, modifying styles/content, traversing/manipulating the DOM, and handling browser events.
- jQuery handles cross-browser inconsistencies and speeds up development of interactive elements and AJAX applications.
РОПан ĐОвНов ÂŤOpen Source UI Automation Tests on C#ÂťSpbDotNet Community
Â
The document discusses open source UI automation for C# using the JDI framework. It introduces JDI elements including simple elements like buttons and text fields, complex elements like dropdowns and tables, and composite elements like pages, sites and forms. It also discusses entity-driven testing where tests are data-driven by providing entity objects to manipulate page elements and assert results.
An idea of how to make JavaScript testable, presented at Stir Trek 2011. The world of JavaScript frameworks has changed greatly since then, but I still agree with the concepts.
The document describes how to create an Android app that allows users to create an account and log in using a SQLite database. The app includes activities for sign up and login. The sign up activity allows creating a new user account by inserting data into a database table. The login activity authenticates users by querying the database and checking the password. The database is implemented using a DatabaseHelper class to manage creating and upgrading the database, and a LoginDatabaseAdapter class for performing CRUD operations.
Python Code Camp (Professionals) is a whole day workshop that aims to enable professionals to learn Python Basics and Django.
Visit: http://devcon.ph/events/python-code-camp-professionals-2016
Python Code Camp (Professionals) is a whole day workshop that aims to enable professionals to learn Python Basics and Django.
Visit: http://devcon.ph/events/python-code-camp-professionals-2016
The document summarizes Simon Willison's presentation on advanced Django topics including unit testing, newforms, Ajax, and OpenID. Key points include:
- Unit testing in Django is encouraged through features like fixtures, doctests, test client, and email capture. Tests should be written before code using test-driven development.
- Newforms provide a declarative way to create forms with fields, validation, rendering, and conversion to Python types. Forms make it easy to display, validate, and process user submissions.
- The test client allows simulating a browser to test views and templates. Ajax functionality can return HTML, XML, or JSON and be integrated with JavaScript libraries like jQuery.
- Form validation
This document provides an overview of the Play! web framework, including its architecture, standard project layout, routing configuration, templating system, and an example of how to build a user registration and login application with Play!. Key points include that Play! is a stateless framework that integrates with JSON and provides a full stack web development environment with built-in features, compilation and error checking. The document outlines how to set up a Play! project and its standard directory structure, configure routes and application settings, design domain models, queries and helper classes, and call business logic from controllers using templated views.
UA testing with Selenium and PHPUnit - PHPBenelux Summer BBQMichelangelo van Dam
Â
Nothing is as frustrated as deploying a new release of your web application to find out functionality you had doesn't work anymore. Of course you have all your unit tests in place and you run them through your CI environment, but nothing prepared you to a failing javascript error or a link that doesn't work anymore. Welcome to User Acceptance testing or UAT. Before you start putting real people in front of your application, create macros and export them as PHPUnit test classes. Then run them in an automated way just like your unit tests and hook them into your CI. In this talk I will show you how easy it is to create Selenium macros that can be converted into PHPUnit scripts and run automatically on different virtual machines (VM's) so you can test all different browsers on a diversity of operating systems.
This document discusses two ways to connect Mule ESB to a Microsoft SQL server database: Windows authentication and basic authentication. Windows authentication requires configuring a JDBC driver JAR file and DLL, and allows integrating Windows credentials directly in the JDBC URL. Basic authentication requires configuring the JDBC driver JAR and providing username and password in the JDBC URL. Both methods require creating a generic database configuration in Mule and selecting it in the database connector to execute queries against the SQL server database.
Developing application for Windows Phone 7 in TDDMichele Capra
Â
A real example of how to develop an application for Windows Phone 7 with Test Driven Development approach. In this presentation you'll see also hoew to implements the Model-View-ViewModel (MVVM) pattern.
This document provides an overview of Node.js and how to use it for web development. It covers installing Node.js, the basic syntax and features of Node.js like modules, asynchronous programming. It also discusses using the NPM package manager and popular Node packages. Finally, it demonstrates how to build a basic web server and framework like Express along with integrating a database like MySQL.
Introduction to Active Record - Silicon Valley Ruby Conference 2007Rabble .
Â
Active Record is an object-relational mapping (ORM) pattern that allows developers to interact with a database using objects rather than SQL queries. It establishes a direct association between classes and database tables, and between class objects and table rows. The key characteristics of Active Record include directly mapping classes to tables, objects to rows, and using finders and setters to encapsulate data access. The Ruby on Rails framework includes an implementation of Active Record to provide data modeling and database access functions.
The document discusses object-oriented programming and design principles. It defines OOP as a programming paradigm based on classes and cooperating objects. It then discusses the SOLID principles of object-oriented design, which are guidelines for writing reusable, flexible and maintainable code. Specifically, it emphasizes that classes and methods should have a single responsibility, code should be open for extension but closed for modification, and software should be designed to be easy to test, change and add new features to.
This lecture includes:
1. JavaScript DOM basics
2. Document object (frequently used properties and methods)
3. Element Object (frequently used properties and methods)
4. Node Object (frequently used properties and methods)
5. Location Object (frequently used properties and methods)
6. Window object (frequently used properties and methods)
Basic Tutorial of React for ProgrammersDavid Rodenas
Â
This is the support of a course to teach React programming for Java and C# programmers. It covers from its origins in Facebook til separation of presentational and container components. What is JSX, rules, state, props, refactoring, conditionals, repeats, forms, synchronizing values, composition, and so on.
This document contains information about protractor training including understanding JavaScript and examples of protractor, setting up protractor in Eclipse, the Jasmine testing framework, and tricks and tips. It also includes sections on Angular, controllers, views, MVC patterns, Razor templating, app fabric caching, WCF, HTML5, CSS3, Bootstrap, HTTP/HTTPS requests, logging, and more.
The document discusses Android testing tools and provides code examples for implementing user authentication using those tools. It recommends Mockito for mocking, Espresso for UI testing, and Dagger for dependency injection. It then shows how to create a UserService class using Dagger dependency injection to handle user authentication via shared preferences. The code is refactored over multiple sections to introduce these tools and improvements like validating the password and keeping the user signed in.
This document discusses Vaadin, GWT, and Web Components. It contains the following key points:
1. Vaadin is a server-driven UI framework that uses GWT for client-side rendering.
2. Vaadin connectors bridge GWT and Vaadin by forming connections between client-side GWT widgets and server-side Vaadin components.
3. Web Components are emerging web standards for encapsulated custom elements that will be important in the future, but browser support is still lacking without polyfills like Polymer.
The document discusses jQuery, a JavaScript library. It provides information on:
- What jQuery is and its main functionality, including DOM scripting, Ajax, user interface effects, and form validation.
- How to get started with jQuery, including downloading the file, adding it to a page via a script tag, and using common selectors like ID, class, and tag name to select elements.
- Common jQuery methods for manipulating elements, like adding and removing classes, traversing the DOM, making GET/POST requests, and loading content via Ajax.
- Ensuring the document is ready before running jQuery code by using the ready function.
So in summary, the document provides an overview
This document provides a quick introduction to Android development. It discusses Android Studio as the primary IDE for Android development and its features. It also covers templates, running apps, building UIs with code and XML, using resources and the R class, basic event handling, Logcat for viewing logs, and best practices for logging.
Nothing is as frustrated as deploying a new release of your web application to find out functionality you had doesn't work anymore. Of course you have all your unit tests in place and you run them through your CI environment, but nothing prepared you to a failing javascript error or a link that doesn't work anymore. Welcome to User Acceptance testing or UAT. Before you start putting real people in front of your application, create macros and export them as PHPUnit test classes. Then run them in an automated way just like your unit tests and hook them into your CI. In this talk I will show you how easy it is to create Selenium macros that can be converted into PHPUnit scripts and run automatically on different virtual machines (VM's) so you can test all different browsers on a diversity of operating systems.
jQuery is a JavaScript library that simplifies HTML document traversing and manipulation, events, animations, and Ajax interactions for rapid web development. It provides a simple way to select elements, handle events, perform animations, and load data asynchronously. The document compares jQuery to other JavaScript libraries like Prototype and Mootools, and covers key jQuery APIs including DOM manipulation, events, Ajax, and animation. It also discusses how to include jQuery, use jQuery selectors, and work with other libraries using jQuery's noConflict() method.
Excuse me, sir, do you have a moment to talk about tests in Kotlinleonsabr
Â
The document discusses problems solved by Kotlin for test automation. It summarizes Kotlin as a JVM language that is statically typed, multi-paradigm, pragmatic, safe, and concise. It then discusses problems Kotlin solves such as cleaner code for collections and maps, extension functions to add functionality, data classes to reduce boilerplate for small classes, and cleaner steps in Allure reports using lambda functions.
WixAutomation - Test State Pattern - Selenium Camp 2017Roi Ashkenazi
Â
With more breaking points and less stability, E2E tests are very hard to maintain. The automation guild at WixEngineering have reduced the amount of flaky tests by utilizing what we define as the âTest State Patternâ, where every test transitions between states according to its behavior.
Python Code Camp (Professionals) is a whole day workshop that aims to enable professionals to learn Python Basics and Django.
Visit: http://devcon.ph/events/python-code-camp-professionals-2016
Python Code Camp (Professionals) is a whole day workshop that aims to enable professionals to learn Python Basics and Django.
Visit: http://devcon.ph/events/python-code-camp-professionals-2016
The document summarizes Simon Willison's presentation on advanced Django topics including unit testing, newforms, Ajax, and OpenID. Key points include:
- Unit testing in Django is encouraged through features like fixtures, doctests, test client, and email capture. Tests should be written before code using test-driven development.
- Newforms provide a declarative way to create forms with fields, validation, rendering, and conversion to Python types. Forms make it easy to display, validate, and process user submissions.
- The test client allows simulating a browser to test views and templates. Ajax functionality can return HTML, XML, or JSON and be integrated with JavaScript libraries like jQuery.
- Form validation
This document provides an overview of the Play! web framework, including its architecture, standard project layout, routing configuration, templating system, and an example of how to build a user registration and login application with Play!. Key points include that Play! is a stateless framework that integrates with JSON and provides a full stack web development environment with built-in features, compilation and error checking. The document outlines how to set up a Play! project and its standard directory structure, configure routes and application settings, design domain models, queries and helper classes, and call business logic from controllers using templated views.
UA testing with Selenium and PHPUnit - PHPBenelux Summer BBQMichelangelo van Dam
Â
Nothing is as frustrated as deploying a new release of your web application to find out functionality you had doesn't work anymore. Of course you have all your unit tests in place and you run them through your CI environment, but nothing prepared you to a failing javascript error or a link that doesn't work anymore. Welcome to User Acceptance testing or UAT. Before you start putting real people in front of your application, create macros and export them as PHPUnit test classes. Then run them in an automated way just like your unit tests and hook them into your CI. In this talk I will show you how easy it is to create Selenium macros that can be converted into PHPUnit scripts and run automatically on different virtual machines (VM's) so you can test all different browsers on a diversity of operating systems.
This document discusses two ways to connect Mule ESB to a Microsoft SQL server database: Windows authentication and basic authentication. Windows authentication requires configuring a JDBC driver JAR file and DLL, and allows integrating Windows credentials directly in the JDBC URL. Basic authentication requires configuring the JDBC driver JAR and providing username and password in the JDBC URL. Both methods require creating a generic database configuration in Mule and selecting it in the database connector to execute queries against the SQL server database.
Developing application for Windows Phone 7 in TDDMichele Capra
Â
A real example of how to develop an application for Windows Phone 7 with Test Driven Development approach. In this presentation you'll see also hoew to implements the Model-View-ViewModel (MVVM) pattern.
This document provides an overview of Node.js and how to use it for web development. It covers installing Node.js, the basic syntax and features of Node.js like modules, asynchronous programming. It also discusses using the NPM package manager and popular Node packages. Finally, it demonstrates how to build a basic web server and framework like Express along with integrating a database like MySQL.
Introduction to Active Record - Silicon Valley Ruby Conference 2007Rabble .
Â
Active Record is an object-relational mapping (ORM) pattern that allows developers to interact with a database using objects rather than SQL queries. It establishes a direct association between classes and database tables, and between class objects and table rows. The key characteristics of Active Record include directly mapping classes to tables, objects to rows, and using finders and setters to encapsulate data access. The Ruby on Rails framework includes an implementation of Active Record to provide data modeling and database access functions.
The document discusses object-oriented programming and design principles. It defines OOP as a programming paradigm based on classes and cooperating objects. It then discusses the SOLID principles of object-oriented design, which are guidelines for writing reusable, flexible and maintainable code. Specifically, it emphasizes that classes and methods should have a single responsibility, code should be open for extension but closed for modification, and software should be designed to be easy to test, change and add new features to.
This lecture includes:
1. JavaScript DOM basics
2. Document object (frequently used properties and methods)
3. Element Object (frequently used properties and methods)
4. Node Object (frequently used properties and methods)
5. Location Object (frequently used properties and methods)
6. Window object (frequently used properties and methods)
Basic Tutorial of React for ProgrammersDavid Rodenas
Â
This is the support of a course to teach React programming for Java and C# programmers. It covers from its origins in Facebook til separation of presentational and container components. What is JSX, rules, state, props, refactoring, conditionals, repeats, forms, synchronizing values, composition, and so on.
This document contains information about protractor training including understanding JavaScript and examples of protractor, setting up protractor in Eclipse, the Jasmine testing framework, and tricks and tips. It also includes sections on Angular, controllers, views, MVC patterns, Razor templating, app fabric caching, WCF, HTML5, CSS3, Bootstrap, HTTP/HTTPS requests, logging, and more.
The document discusses Android testing tools and provides code examples for implementing user authentication using those tools. It recommends Mockito for mocking, Espresso for UI testing, and Dagger for dependency injection. It then shows how to create a UserService class using Dagger dependency injection to handle user authentication via shared preferences. The code is refactored over multiple sections to introduce these tools and improvements like validating the password and keeping the user signed in.
This document discusses Vaadin, GWT, and Web Components. It contains the following key points:
1. Vaadin is a server-driven UI framework that uses GWT for client-side rendering.
2. Vaadin connectors bridge GWT and Vaadin by forming connections between client-side GWT widgets and server-side Vaadin components.
3. Web Components are emerging web standards for encapsulated custom elements that will be important in the future, but browser support is still lacking without polyfills like Polymer.
The document discusses jQuery, a JavaScript library. It provides information on:
- What jQuery is and its main functionality, including DOM scripting, Ajax, user interface effects, and form validation.
- How to get started with jQuery, including downloading the file, adding it to a page via a script tag, and using common selectors like ID, class, and tag name to select elements.
- Common jQuery methods for manipulating elements, like adding and removing classes, traversing the DOM, making GET/POST requests, and loading content via Ajax.
- Ensuring the document is ready before running jQuery code by using the ready function.
So in summary, the document provides an overview
This document provides a quick introduction to Android development. It discusses Android Studio as the primary IDE for Android development and its features. It also covers templates, running apps, building UIs with code and XML, using resources and the R class, basic event handling, Logcat for viewing logs, and best practices for logging.
Nothing is as frustrated as deploying a new release of your web application to find out functionality you had doesn't work anymore. Of course you have all your unit tests in place and you run them through your CI environment, but nothing prepared you to a failing javascript error or a link that doesn't work anymore. Welcome to User Acceptance testing or UAT. Before you start putting real people in front of your application, create macros and export them as PHPUnit test classes. Then run them in an automated way just like your unit tests and hook them into your CI. In this talk I will show you how easy it is to create Selenium macros that can be converted into PHPUnit scripts and run automatically on different virtual machines (VM's) so you can test all different browsers on a diversity of operating systems.
jQuery is a JavaScript library that simplifies HTML document traversing and manipulation, events, animations, and Ajax interactions for rapid web development. It provides a simple way to select elements, handle events, perform animations, and load data asynchronously. The document compares jQuery to other JavaScript libraries like Prototype and Mootools, and covers key jQuery APIs including DOM manipulation, events, Ajax, and animation. It also discusses how to include jQuery, use jQuery selectors, and work with other libraries using jQuery's noConflict() method.
Excuse me, sir, do you have a moment to talk about tests in Kotlinleonsabr
Â
The document discusses problems solved by Kotlin for test automation. It summarizes Kotlin as a JVM language that is statically typed, multi-paradigm, pragmatic, safe, and concise. It then discusses problems Kotlin solves such as cleaner code for collections and maps, extension functions to add functionality, data classes to reduce boilerplate for small classes, and cleaner steps in Allure reports using lambda functions.
WixAutomation - Test State Pattern - Selenium Camp 2017Roi Ashkenazi
Â
With more breaking points and less stability, E2E tests are very hard to maintain. The automation guild at WixEngineering have reduced the amount of flaky tests by utilizing what we define as the âTest State Patternâ, where every test transitions between states according to its behavior.
This document discusses how to evaluate and improve Selenium tests, page objects, and locators. It provides rubrics to grade tests on a 100 point scale, deducting points for issues like using Selenium commands directly or hard-coded waits. Page objects are graded on lines of code, assertions, and waits. Locators are given letter grades based on attributes like being dynamic, tied to layout, or using semantic IDs. An example shows overall grades for a test suite, individual tests, and locators within tests. The document concludes by proposing implementing the rubrics as an IntelliJ plugin to automate evaluation and reporting.
Working in many companies as consultant, delivery manager or tech lead I have always seen the same mistakes made in test automation process. I could count successful cases on fingers of one hand. Sometimes people donât understand the true value of test automation, sometimes just could not organize this process spending lots of money and time without any significant result. I want to share 5 top mistakes aggregated from whole my practice and solutions I recommend for them.
Design patters exist for years in software development. Some developers love them, some think they are useless. But design patters has very clear goals: describe common solutions for common problems, create shared language for community, improve understanding and reuse of existing approaches. Test automation has its own set of problems, so there is a set of helpful design patterns for this area. In this talk I will run through all known patterns and describe them in details with several practical samples.
Test trend analysis: Towards robust reliable and timely testsHugh McCamphill
Â
This document discusses test trend analysis and making tests more robust, reliable, and timely. It proposes collecting test results data and storing it in Elasticsearch. Visualizations would then be created using Kibana to analyze test failures, slow tests, error messages, and step times. This would provide insights and help identify issues to make tests less flaky.
How does Java 8 exert hidden power on Test Automation?Sergey Korol
Â
Are you still wondering if it makes sense switching to Java 8? In the related SeleniumCamp 17 talk youâll see useful practical examples of how new Java features in a combination with some powerful libraries (streamex, moneta, lombok, etc.) could make your test automation easier, drastically reduce implementation time and avoid reinventing the wheel.
Testing Metrics - Making your tests visibleAlper Mermer
Â
This document discusses the importance of testing metrics and recommends several metrics that should be tracked. It recommends tracking individual service performance, scenarios run in each build, security warnings, test coverage, code quality metrics, number of tests and test run time, defects by priority, number of defects from production, defects by module, and mean time between build failures. The document emphasizes that metrics help make testing trends visible, improve ownership and prevent issues, but not all metrics are needed for every project and metrics should help rather than replace human judgment.
The Battle on Selenium Camp conferece February 2017
http://seleniumcamp.com/talk/qa-livecoding-battle-typed-element-framework-jdi-vs-untyped-elements-framework-selenide/
Why typed elements (like Buttons, Images, Checkboxes, Links etc.) are bad practice in UI tests? Or are non-typed elements (like SelenideElement for ´em all!) more evil? Is it better to have predefined Element hierarchy or not?
Alexei and Roman have delivered a sound theoretical battle earlier at Heisenbug-2016 Conference in Moscow. But were everything said just words? The both QA wrestlers are still standing behind their concepts and are willing to prove their point at live coding sessions before the judging audience! In this QA Battle the parties will solve problems using a typed framework JDI and an non-typed one â Selenide, commenting their actions. The audience will decide with their votes which of the concept was better.
In agile software development world, we are dealing with many test tasks such as user story testing, exploratory testing, check-list based testing, regression testing, performance testing, security testing in each sprint. Besides these testing activities, one of the test types which is considerably getting crucial is visual regression testing.
Visual regression testing focuses on to check visual contents and animations, page layout, and responsive design of a website/app. Because of the limits of human vision, human-based visual regression testing is generally error-prone and cumbersome. Hence, automation is inevitable. It enables us to run the tests much more precisely in a short time period. Also, it saves us a significant amount of time to deal with other manual test activities in each sprint.
In this talk, we will walk through well-known open-source and commercial solutions for visual test automation. We will learn which technologies they use, what type of visual tests they are suitable for, and their major differences between each other. Besides this overview, we will also make a real-life visual test automation demo by using Selenium, ImageMagick, and AShot.
The document discusses the garbage-collected teardown pattern. It describes how the pattern works by relying on garbage collection to clean up fixture objects rather than requiring explicit teardown code. It recommends using this pattern when fixtures contain transient objects or shared fixtures to ensure a fresh state between tests. Implementation notes cover using this pattern with test frameworks that reload classes between tests.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise causes chemical changes in the brain that may help alleviate symptoms of mental illness and boost overall mental well-being.
Little productivity tools every developer should useDennis Doomen
Â
During my last few talks I was surprised to learn how few developers are aware of the power of Microsoft OneNote, one of the products in the Microsoft Office suite. OneNote is an advanced digital notebook that I use for accessing my personal notes through SkyDrive or Office 365, as well as a shared notebook that agile teams use for keeping track of who is doing what. In fact, those who practice Test Driven Development will be surprised how essential OneNote is. In addition to OneNote, many other tools and add-ons exist that can really boost your productivity. Some you may know, some you don't. But do you already get the most out of tools like NuGet, GhostDoc, ReSharper, Notepad++, and many others? If you're in doubt, come check out my session. I'lI show you what I use to be as efficient as possible in my job as a professional developer.
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...SOASTA
Â
Build, Test, Deploy Mobile Apps with a fully automated Continuous Intergration solution..in the Cloud...for free...
Kohsuke Kawaguchi, Jenkins creator, and Mark Prichard of CloudBees join SOASTA for a demos and discussion of CI for mobile in the cloud. From Nov. 15, 2012 webinar. (a repeat of Sept 27, 2012 webinar)
DOES14 - Jonny Wooldridge - The Cambridge Satchel Company - 10 Enterprise Tip...Gene Kim
Â
Jonny Wooldridge, CTO, The Cambridge Satchel Company at the DevOps Enterprise Summit 2014
View video: https://www.youtube.com/watch?v=CzUTztwcc58
View Jonny Wooldridge's blog: http://www.enterprisedevops.com
Following 3.5 years building a DevOps capability and culture at M&S I will be condensing the experience down to 10 Enterprise DevOps tips that are relevant to companies of all sizes and complexities. Bringing start-up lean thinking to an enterprise was never going to be easy but the lessons learned are relevant to us all.
The document appears to be a presentation on quality driven development and behavior driven development. It discusses testing strategies like unit testing, TDD, integration testing and acceptance testing. It also covers benefits of techniques like TDD, limitations of classic QA approaches, and introduces concepts like feature-first development, outside-in testing, and using a language like Gherkin to define testable features and scenarios. Tools mentioned include jBehave, Scalatest, Cucumber and Capybara.
This document discusses using Behavior Driven Development (BDD) tools like Cucumber, Webrat, and RSpec to test legacy Rails code. It provides an overview of BDD and these tools, and how they can be used to test Rails models, controllers and views through features, mocking objects, and message expectations. While useful for testing legacy code, the document notes there is no silver bullet and BDD requires ongoing changes to keep tests and code in sync.
1) The document discusses Geb, a browser automation framework for testing web and mobile applications. It provides examples of using Page Object Model and control modules to organize tests.
2) It describes using selectors, assertions, waiting techniques, and interacting with elements via mouse, keyboard and JavaScript. Multiple browsers are supported for testing.
3) Project structure, organizing requirements as stories and features, implementing page objects and test steps are covered. Other frameworks like Selenide are also mentioned.
This DrupalCon 2019 Amsterdam talk provides a look beyond the world of PHP and Javascript. It explores how other languages such as Ruby, Java, Rust and Perl handle things and highlights some interesting features of those languages. Not all the things that other languages can do can be done in PHP or Javascript but the concepts and ideas can still be used.
Smarttuts is an open online tutorial platform that allows publishers worldwide to share knowledge. It provides publishers opportunities to publish content and earn money, while giving visitors access to a wide range of educational materials. The platform supports different media types like audio, video, images and source code. Users can contribute by commenting on or correcting existing articles.
CDI provides standards-based and typesafe dependency injection in Java EE 6. It integrates well with other Java EE 6 technologies like EJB, JPA, JSF, and JAX-WS. Portable extensions facilitate a richer programming model. Weld is the reference implementation of CDI and is integrated into application servers like GlassFish and JBoss.
The presentation is devoted to the test framework GEB for testing WEB applications and Mobile. The report will be useful for those who want to know how fast to write tests in the programming language Groovy, and not think about framework, PageObject and initializing the WebDriver. Framework is difficult - no!
This presentation by Yaroslav Sviatkin (Senior Test Automation Engineer, Consultant, GlobalLogic, Kharkiv) was delivered at QA Fest 2017 (Kyiv) on September 22, 2017.
Continuous integration using thucydides(bdd) with seleniumKhyati Sehgal
Â
In Thucydides, page objects can be just ordinary WebDriver page objects, on the condition that they have a constructor that accepts a WebDriver parameter. However, the Thucydides PageObject class provides a number of utility methods that make page objects more convenient to work with.
The Ring programming language version 1.9 book - Part 54 of 210Mahmoud Samir Fayed
Â
This document discusses using the RingLibCurl library in Ring to make HTTP requests. It provides examples of making GET and POST requests, using cURL to log into Facebook, saving the output of a request to a string, and retrieving stock data from Yahoo Finance by extracting cookie and crumb values. The examples demonstrate initializing cURL handles, setting options like the URL, headers, and cookies, performing requests, and cleaning up handles after requests are completed.
An overview how to realize code generation of languages on the JVM that implement other class layouts than the Java programming languages. As an example, the inline-mock-maker for Mockito is discussed which supports languages like Kotlin that make any property final by default.
HTML5 introduces new semantic elements like article, header, nav, and section that divide the content into meaningful regions. It also defines new multimedia elements such as video, audio, and canvas. New form input types and attributes are added for validation. The Canvas API allows dynamic drawing via scripting. The Drag and Drop API supports dragging and dropping elements. Other HTML5 APIs include Geolocation, Web Storage, and Web Workers. Overall, HTML5 provides a powerful set of features for building robust, dynamic web applications.
Wicket in Action is the introduction I gave at the Ăredev conference in MalmĂś, Sweden in November 2008. You'll learn about Wicket, Components, Models, Integrating Spring, Testing, and deploying your Wicket application.
Unfortunately slideshare doesn't work with accented letters in the URL, so I had to change the title.
The document discusses test integration and provides examples of how to use the jIntegrity library to simplify database integration testing. It shows how jIntegrity can load test data from XML files, execute SQL statements to insert, update, delete and clean data, and be configured through properties files. jIntegrity aims to provide flexibility, organization and reuse through its API and helper classes to help automate common database operations for integration testing.
Build powerfull and smart web applications with Symfony2Hugo Hamon
Â
Symfony2 first stable release is scheduled for the first week of March 2011. During this session, we will have a look at the new framework architecture and most of its powerfull features.
We will show you how Symfony2 implements the MVC pattern and an HTTP request is processed and converted as a response for the end user. Of course, we will talk about the configuration principles and how it's easy to configure Symfony2 project parts like the routing system or the data model. We will also focus on other major components of the framework like the Doctrine2 integration, forms, security (authentication and authorizations) or HTTP cache management.
REX about JavaFX8 used in SlideshowFX. This presentation covers concept from JavaFX as well as technologies like OSGi, Vert.x, LeapMotion, nashorn and friends in order to make them communicate inside one application developed in JavaFX.
This presentation was made at the FinistJUG, NantesJUG and NormandyJUG.
This document provides an overview of Flask, a microframework for Python. It discusses that Flask is easy to code and configure, extensible via extensions, and uses Jinja2 templating and SQLAlchemy ORM. It then provides a step-by-step guide to setting up a Flask application, including creating a virtualenv, basic routing, models, forms, templates, and views. Configuration and running the application are also covered at a high level.
This document provides information on various tools and projects, including:
- JSON Server for creating a REST API from a JSON database
- JSON GraphQL Server for creating a GraphQL API from JSON
- react-jsonschema-form for building forms from JSON schemas in React
- docz for creating documentation sites from MDX files
- Additional resources like CodeSandbox, Runkit, Prisma, and Visual Studio Code are also mentioned.
Similar to Better Bullshit Driven Development [SeleniumCamp 2017] (20)
Dive into the realm of operating systems (OS) with Pravash Chandra Das, a seasoned Digital Forensic Analyst, as your guide. đ This comprehensive presentation illuminates the core concepts, types, and evolution of OS, essential for understanding modern computing landscapes.
Beginning with the foundational definition, Das clarifies the pivotal role of OS as system software orchestrating hardware resources, software applications, and user interactions. Through succinct descriptions, he delineates the diverse types of OS, from single-user, single-task environments like early MS-DOS iterations, to multi-user, multi-tasking systems exemplified by modern Linux distributions.
Crucial components like the kernel and shell are dissected, highlighting their indispensable functions in resource management and user interface interaction. Das elucidates how the kernel acts as the central nervous system, orchestrating process scheduling, memory allocation, and device management. Meanwhile, the shell serves as the gateway for user commands, bridging the gap between human input and machine execution. đť
The narrative then shifts to a captivating exploration of prominent desktop OSs, Windows, macOS, and Linux. Windows, with its globally ubiquitous presence and user-friendly interface, emerges as a cornerstone in personal computing history. macOS, lauded for its sleek design and seamless integration with Apple's ecosystem, stands as a beacon of stability and creativity. Linux, an open-source marvel, offers unparalleled flexibility and security, revolutionizing the computing landscape. đĽď¸
Moving to the realm of mobile devices, Das unravels the dominance of Android and iOS. Android's open-source ethos fosters a vibrant ecosystem of customization and innovation, while iOS boasts a seamless user experience and robust security infrastructure. Meanwhile, discontinued platforms like Symbian and Palm OS evoke nostalgia for their pioneering roles in the smartphone revolution.
The journey concludes with a reflection on the ever-evolving landscape of OS, underscored by the emergence of real-time operating systems (RTOS) and the persistent quest for innovation and efficiency. As technology continues to shape our world, understanding the foundations and evolution of operating systems remains paramount. Join Pravash Chandra Das on this illuminating journey through the heart of computing. đ
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
Â
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Jeffrey Haguewood
Â
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on integration of Salesforce with Bonterra Impact Management.
Interested in deploying an integration with Salesforce for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
Â
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Â
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Â
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
Â
An English đŹđ§ translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech đ¨đż version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
Â
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This yearâs report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether youâre at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. Weâll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Â
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Tatiana Kojar
Â
Skybuffer AI, built on the robust SAP Business Technology Platform (SAP BTP), is the latest and most advanced version of our AI development, reaffirming our commitment to delivering top-tier AI solutions. Skybuffer AI harnesses all the innovative capabilities of the SAP BTP in the AI domain, from Conversational AI to cutting-edge Generative AI and Retrieval-Augmented Generation (RAG). It also helps SAP customers safeguard their investments into SAP Conversational AI and ensure a seamless, one-click transition to SAP Business AI.
With Skybuffer AI, various AI models can be integrated into a single communication channel such as Microsoft Teams. This integration empowers business users with insights drawn from SAP backend systems, enterprise documents, and the expansive knowledge of Generative AI. And the best part of it is that it is all managed through our intuitive no-code Action Server interface, requiring no extensive coding knowledge and making the advanced AI accessible to more users.
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Jeffrey Haguewood
Â
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on automated letter generation for Bonterra Impact Management using Google Workspace or Microsoft 365.
Interested in deploying letter generation automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Digital Marketing Trends in 2024 | Guide for Staying AheadWask
Â
https://www.wask.co/ebooks/digital-marketing-trends-in-2024
Feeling lost in the digital marketing whirlwind of 2024? Technology is changing, consumer habits are evolving, and staying ahead of the curve feels like a never-ending pursuit. This e-book is your compass. Dive into actionable insights to handle the complexities of modern marketing. From hyper-personalization to the power of user-generated content, learn how to build long-term relationships with your audience and unlock the secrets to success in the ever-shifting digital landscape.
Fueling AI with Great Data with Airbyte WebinarZilliz
Â
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
6. xUnit style
public class DiasporaTest extends BaseTest {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
loginPage.open();â¨
loginPage.signIn(Users.Selenide.username, Users.Selenide.password);â¨
newPost.start();â¨
newPost.write("Selenide 4.2 released!");â¨
newPost.share();â¨
stream.shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
7. xUnit style
public class DiasporaTest extends BaseTest {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
loginPage.open();â¨
loginPage.signIn(Users.Selenide.username, Users.Selenide.password);â¨
newPost.start();â¨
newPost.write("Selenide 4.2 released!");â¨
newPost.share();â¨
stream.shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
8. BDD style (option 1)
@defaultsâ¨
Feature: Diasporaâ¨
â¨
Scenario: Share messageâ¨
Given I open login pageâ¨
And I do sign in with credentials: 'selenide', 'xxxxxxxx'â¨
When I start new postâ¨
And write new post message: 'Selenide 4.2 is released!'â¨
And share new postâ¨
Then stream should have post with index '1' of text 'Selenide 4.2 is
released!'
9. BDD style (option 1)
public class DiasporaStepdefs {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Given("^I open login page$")â¨
public void I_open_login_page(){â¨
loginPage.open();â¨
}â¨
â¨
â¨
@And("^I do sign in with credentials: '(.+)', '(.+)'$")â¨
public void I_do_sign_in_with_credentials_selenide_yagniyagni(String
username, String password) {â¨
loginPage.signIn(username, password);â¨
}
...
10. BDD style (option 1)
...â¨
@When("^I start new post$")â¨
public void I_start_new_post(){â¨
newPost.start();â¨
}â¨
â¨
@And("^write new post message: '(.+)'$")â¨
public void write_new_post_message_Selenide_is_released_(String text){â¨
newPost.write(text);â¨
}
...
11. BDD style (option 1)
...
@And("^share new post$")â¨
public void share_new_post() {â¨
newPost.share();â¨
}â¨
â¨
@Then("^stream should have post with index '( d+)' of text '(.+)'$")â¨
public void
stream_should_have_post_with_index_of_text_Selenide_is_released_(int
index, String text) {â¨
stream.shouldHavePostWithText(index-1, text);â¨
}â¨
}
12.
13. BDD style (option 2)
@defaultsâ¨
Feature: Diasporaâ¨
â¨
Scenario: Share messageâ¨
Given I signed in from login page with credentials: 'selenide', 'xxxx'â¨
When I publish new post: 'Selenide 4.2 is released!'â¨
Then I should see new post 'Selenide 4.2 is released!' in the top of
stream
14. BDD style (option 2)
public class DiasporaStepdefs {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Given("^I signed in from login page with credentials: '(.+)', '(.+)'$")â¨
public void
I_signed_in_from_login_page_with_credentials_selenide_yagniyagni(String
username, String password) {â¨
loginPage.open();â¨
loginPage.signIn(username, password);â¨
}
...
15. BDD style (option 2)
...
@When("^I publish new post: '(.+)'$")â¨
public void I_publish_new_post_Selenide_is_released_(String text) {â¨
newPost.start();â¨
newPost.write(text);â¨
newPost.share();â¨
}â¨
â¨
@Then("^I should see new post '(.+)' in the top of stream$")â¨
public void
I_should_see_new_post_Selenide_is_released_in_the_top_of_stream(String
text) {â¨
stream.shouldHavePostWithText(0, text);â¨
}â¨
}
29. =BDD Optimised
ATDD
=
Devs write acceptance
tests ďŹrst
based on scenarios
already written by BA/PO
unbiased thinking of end
product
doing things once
(reqs are 2 in 1 - are
already automatable)
30. =BDD Optimised
ATDD
=
Devs write acceptance
tests ďŹrst
based on scenarios
already written by BA/PO
unbiased thinking of end
product
doing things once
(reqs are 2 in 1 - are
already automatable)
31. Optimised
ATDD
=
Devs write acceptance
tests ďŹrst
based on scenarios
already written by BA/PO
unbiased thinking of end
product
doing things once
(reqs are 2 in 1 - are
already automatable)
Behaviour Driven Development
32. Optimised
ATDD
=
Devs write acceptance
tests ďŹrst
based on scenarios
already written by BA/PO
unbiased thinking of end
product
doing things once
(reqs are 2 in 1 - are
already automatable)
Beh?viour Driven Development
33. Optimised
ATDD
=
Devs write acceptance
tests ďŹrst
based on scenarios
already written by BA/PO
Automation engineers
write tests after.
adding extra âreadable
scenariosâ layer for âgood
reportsâ
Beh?viour Driven Development
vs
vs
34. Optimised
ATDD
=
Devs write acceptance
tests ďŹrst
based on scenarios
already written by BA/PO
Automation engineers
write tests after.
adding extra âreadable
scenariosâ layer for âgood
reportsâ
Bullshit Driven Development
vs
vs
40. xUnit + PageObject with readable steps
public class DiasporaTest extends BaseTest {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
loginPage.open();â¨
loginPage.signIn(Users.Selenide.username, Users.Selenide.password);â¨
newPost.start();â¨
newPost.write("Selenide 4.2 released!");â¨
newPost.share();â¨
stream.shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
41. xUnit + PageObject with readable steps
public class DiasporaTest extends BaseTest {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
loginPage.open();â¨
loginPage.signIn(Users.Selenide.username, Users.Selenide.password);â¨
newPost.start();â¨
newPost.write("Selenide 4.2 released!");â¨
newPost.share();â¨
stream.shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
42. xUnit + PageObject with readable steps
public class DiasporaTest extends BaseTest {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
loginPage.open();â¨
loginPage.signIn(Users.Selenide.username, Users.Selenide.password);â¨
newPost.start();â¨
newPost.write("Selenide 4.2 released!");â¨
newPost.share();â¨
stream.shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
43. xUnit + PageObject with readable steps
public class LoginPage {â¨
â¨
public void open() {â¨
Selenide.open("/users/sign_in");â¨
}â¨
â¨
public void signIn(String username, String password) {â¨
Form form = new Form($("#new_user"));â¨
form.set("USERNAME", username);â¨
form.set("PASSWORD", password);â¨
form.submit();â¨
}â¨
}
56. Missed âobjects infoâ in reports :(
public class DiasporaTest extends BaseTest {â¨
LoginPage loginPage = new LoginPage();â¨
NewPost newPost = new NewPost();â¨
Stream stream = new Stream();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
loginPage.open();â¨
loginPage.signIn(Users.Selenide.username, Users.Selenide.password);â¨
newPost.start();â¨
newPost.write("Selenide 4.2 released!");â¨
newPost.share();â¨
stream.shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
57. Report :(
Missed âobjects infoâ in reports :(
What is opened?
Where do we do signin?
What do we start?
Where?
58. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
diaspora.loginPage().open();â¨
diaspora.loginPage()â¨
.signIn(Users.Selenide.username, Users.Selenide.password);â¨
diaspora.newPost().start();â¨
diaspora.newPost().write("Selenide 4.2 released!");â¨
diaspora.newPost().share();â¨
diaspora.stream().shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
59. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
public class Diaspora {â¨
â¨
@Stepâ¨
public LoginPage loginPage() {â¨
return new LoginPage();â¨
}â¨
â¨
@Stepâ¨
public NewPost newPost() {â¨
return new NewPost();â¨
}â¨
â¨
@Stepâ¨
public Stream stream() {â¨
return new Stream();â¨
}
...â¨
}
60. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
public class Diaspora {â¨
â¨
@Stepâ¨
public LoginPage loginPage() {â¨
return new LoginPage();â¨
}â¨
â¨
@Stepâ¨
public NewPost newPost() {â¨
return new NewPost();â¨
}â¨
â¨
@Stepâ¨
public Stream stream() {â¨
return new Stream();â¨
}
...â¨
}
The simplest impl.
with
redundant objects,
not actually inďŹuencing
performance much
61. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
public class Diaspora {â¨
private final LoginPage loginPage;â¨
private final NewPost newPost;â¨
private final Stream stream;â¨
â¨
public Diaspora() {â¨
this.loginPage = new LoginPage();â¨
this.newPost = new NewPost();â¨
this.stream = new Stream();â¨
}â¨
â¨
@Stepâ¨
public LoginPage loginPage() {â¨
return this.loginPage;â¨
}â¨
...â¨
}
but in case
you botherâŚ
62. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
public class Application {â¨
private final LoginPage loginPage;â¨
private final NewPost newPost;â¨
private final Stream stream;â¨
â¨
public Application() {â¨
this.loginPage = new LoginPage();â¨
this.newPost = new NewPost();â¨
this.stream = new Stream();â¨
}â¨
â¨
@Stepâ¨
public LoginPage loginPage() {â¨
return this.loginPage;â¨
}â¨
...â¨
}
aka Application Manager
63. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
public class DiasporaTest extends BaseTest {â¨
Application app = new Application();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
app.loginPage().open();â¨
app.loginPage()â¨
.signIn(Users.Selenide.username, Users.Selenide.password);â¨
app.newPost().start();â¨
app.newPost().write("Selenide 4.2 released!");â¨
app.newPost().share();â¨
app.stream().shouldHavePostWithText(0, "Selenide 4.2 released!");â¨
}â¨
}
aka Application Manager
65. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
Report
May be a bit âtoo longâ
while reading to ďŹnd
âlogical code sentencesââŚ
66. Fixing âmissed objectsâ with One Entry Point to PageObjects :)
Report
But if consider
that âeach sentenceâ is two lines
it becomes to make sense:)
67. Applying Fluent PageObject for easier scenarios âŚ
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
diaspora.loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
diaspora.newPost().start().write("Selenide 4.2 released!").share();â¨
diaspora.stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
68. Applying Fluent PageObject for easier scenarios âŚ
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
diaspora.loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
diaspora.newPost().start().write("Selenide 4.2 released!").share();â¨
diaspora.stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
69. Applying Fluent PageObject for easier scenarios âŚ
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
diaspora.loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
diaspora.newPost().start().write("Selenide 4.2 released!").share();â¨
diaspora.stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
70. Applying Fluent PageObject for easier scenarios âŚ
public class NewPost {â¨
...â¨
@Stepâ¨
public NewPost start() {â¨
this.textArea.click();â¨
return this;â¨
}â¨
â¨
@Stepâ¨
public NewPost write(String text) {â¨
this.textArea.setValue(text);â¨
return this;â¨
}â¨
â¨
@Stepâ¨
public void share(){â¨
this.container.find("#submit").click();â¨
}â¨
71. Applying Fluent PageObject for easier scenarios âŚ
public class NewPost {â¨
...â¨
@Stepâ¨
public NewPost start() {â¨
this.textArea.click();â¨
return this;â¨
}â¨
â¨
@Stepâ¨
public NewPost write(String text) {â¨
this.textArea.setValue(text);â¨
return this;â¨
}â¨
â¨
@Stepâ¨
public void share(){â¨
this.container.find("#submit").click();â¨
}â¨
no need to be âďŹuentâ here,
as we do not know,
where user should proceed a ďŹow
72. ⌠may lead to âmissing ďŹowâ in reports :(
Report :(
Where does the sentence
start and ďŹnish?
73. ⌠may lead to âmissing ďŹowâ in reports :(
Report :(
Where does the sentence
start and ďŹnish?
74. Fixing âmissed ďŹowâ with âgherkinâ pseudo-stepsâŚ
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
GIVEN("Logged in from login page");â¨
diaspora.loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
WHEN("Posted new message");â¨
diaspora.newPost().start().write("Selenide 4.2 released!").share();â¨
THEN("Message should appear in the stream");â¨
diaspora.stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
75. Fixing âmissed ďŹowâ with âgherkinâ pseudo-stepsâŚ
public class Gherkin {â¨
â¨
@Stepâ¨
public static void GIVEN(String step) {}â¨
â¨
@Stepâ¨
public static void AND(String step) {}â¨
â¨
@Stepâ¨
public static void WHEN(String step) {}â¨
â¨
@Stepâ¨
public static void THEN(String step) {}â¨
}
81. ⌠leads sometimes to even more to readable code
THEN("Connect first cell of this column to first row from data storage");â¨
app.testTable().row(0).cell(0).fill("1").hover();â¨
â¨
EXPECT("Connection works by showing connected data in a cell tooltip (on
hover)");â¨
app.testTable().toolTip()â¨
.shouldHaveKeyRowCells("", "user", "password")â¨
.shouldHaveValueRowCells("1", "vasya", "pupkin1234");
Implementation
(more complicated example)
82. ⌠leads sometimes to not much more readable
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
GIVEN("Logged in from login page");â¨
diaspora.loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
WHEN("Posted new message");â¨
diaspora.newPost().start().write("Selenide 4.2 released!").share();â¨
THEN("Message should appear in the stream");â¨
diaspora.stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
83. ⌠and often redundant code :|
public class DiasporaTest extends BaseTest {â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Testâ¨
public void shareMessage() {â¨
GIVEN("Logged in from login page");â¨
diaspora.loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
WHEN("Posted new message");â¨
diaspora.newPost().start().write("Selenide 4.2 released!").share();â¨
THEN("Message should appear in the stream");â¨
diaspora.stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
just repeats already
readable âcodeâ
84. Fixing everything:) with âgherkinâ style of One Entry Point
public class DiasporaTest extends GherkinTest {â¨
â¨
@Testâ¨
public void shareMessage() {â¨
GIVEN().loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
WHEN().newPost().start().write("Selenide 4.2 released!").share();â¨
THEN().stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}
85. Fixing everything:) with âgherkinâ style of One Entry Point
public class GherkinTest {â¨
...â¨
Diaspora diaspora = new Diaspora();â¨
â¨
@Stepâ¨
public Diaspora GIVEN(String ... comments) { return this.diaspora; }â¨
â¨
@Stepâ¨
public Diaspora AND(String ... comments) { return this.diaspora; }â¨
â¨
@Stepâ¨
public Diaspora WHEN(String ... comments) { return this.diaspora; }â¨
â¨
@Stepâ¨
public Diaspora THEN(String ... comments) { return this.diaspora; }â¨
}
86. Fixing everything:) with âgherkinâ style of One Entry Point
Report :D
Each new âcode sentenceâ
starts with a âgherkinâ keyword
87. Fixing everything:) with âgherkinâ style of One Entry Point
THEN("Connect first cell of this column to first row from data storage")â¨
.testTable().row(0).cell(0).fill("1").hover();â¨
â¨
EXPECT("Connection works by showing connected data in a cell tooltip (on
hover)")â¨
.testTable().toolTip()â¨
.shouldHaveKeyRowCells("", "user", "password")â¨
.shouldHaveValueRowCells("1", "vasya", "pupkin1234");
Implementation
(more complicated example)
with additional step comments when needed
88. Fixing everything:) with âgherkinâ style of One Entry Point
Report
(more complicated example)
89. Summary
GIVEN
no BA writing Gherkin
AND automation engineers writing tests after
WHEN
xUnit
AND Fluent PageObjects with Allure readable @Steps
AND Gherkin style of One Entry Point (aka Application Manager)
THEN
Bullshit Driven Development is Better
90. Better Bullshit Driven Development with
xUnit, Fluent PageObjects, Allure @Steps, âGherkined" One Entry Point
⢠all-powerful programming language over textual-pseudo-language
⢠full IDE support (autocompletion, auto-generate, etc.)
⢠1 abstraction layer less => simpler and faster in implementation
⢠still fully readable and with pretty good reports
⢠newcomers friendly
⢠Just One Entry Point to all Application Model
⢠structured with granular Fluent PageObjects => easier to
learn&use via autocompletion
91. Better Bullshit Driven Development with
xUnit, Fluent PageObjects, Allure @Steps, âGherkined" One Entry Point
⢠all-powerful programming language over textual-pseudo-language
⢠full IDE support (autocompletion, auto-generate, etc.)
⢠1 abstraction layer less => simpler and faster in implementation
⢠still fully readable and with pretty good reports
⢠newcomers friendly
⢠Just One Entry Point to all Application Model
⢠structured with granular Fluent PageObjects => easier to
learn&use via autocompletion
92. Better Bullshit Driven Development with
xUnit, Fluent PageObjects, Allure @Steps, âGherkined" One Entry Point
⢠all-powerful programming language over textual-pseudo-language
⢠full IDE support (autocompletion, auto-generate, etc.)
⢠1 abstraction layer less => simpler and faster in implementation
⢠still fully readable and with pretty good reports
⢠newcomers friendly
⢠Just One Entry Point to all Application Model
⢠structured with granular Fluent PageObjects => easier to
learn&use via autocompletion
93. Better Bullshit Driven Development with
xUnit, Fluent PageObjects, Allure @Steps, âGherkined" One Entry Point
⢠all-powerful programming language over textual-pseudo-language
⢠full IDE support (autocompletion, auto-generate, etc.)
⢠1 abstraction layer less => simpler and faster in implementation
⢠still fully readable and with pretty good reports
⢠newcomers friendly
⢠Just One Entry Point to all Application Model
⢠structured with granular Fluent PageObjects => easier to
learn&use via autocompletion
94. Better Bullshit Driven Development with
xUnit, Fluent PageObjects, Allure @Steps, âGherkined" One Entry Point
⢠all-powerful programming language over textual-pseudo-language
⢠full IDE support (autocompletion, auto-generate, etc.)
⢠1 abstraction layer less => simpler and faster in implementation
⢠still fully readable and with pretty good reports
⢠newcomers friendly
⢠Just One Entry Point to all Application Model
⢠structured with granular Fluent PageObjects => easier to
learn&use via autocompletion
95. Better Bullshit Driven Development ;)
public class DiasporaTest extends GherkinTest {â¨
â¨
@Testâ¨
public void shareMessage() {â¨
GIVEN().loginPage().open().signIn(â¨
Users.Selenide.username,â¨
Users.Selenide.password);â¨
WHEN().newPost().start().write("Selenide 4.2 released!").share();â¨
THEN().stream().post(0).shouldBe("Selenide 4.2 released!");â¨
}â¨
}