An overview of different approaches to Page Objects and Domain Objects for GUI Automation. Examples use WebDriver and Java.
Full source code is available to download, For more details see the associated blog post.
Are you using the best architecture? Want to know how to make sure you are architecting things properly? Interested to learn where the new library features fit in? Come to this session to learn more.
This document summarizes the major changes and new features introduced in each version of Java from Java 8 to Java 17. It discusses key enhancements like modules in Java 9, switch expressions in Java 12, text blocks in Java 13, records and pattern matching in Java 14, sealed classes in Java 15 and strong encapsulation in Java 16. It also provides code examples to illustrate many of the new Java features.
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Edureka!
This tutorial on Selenium will help you understand what is Page Object Model (POM) and Page Factory? You will also understand why POM design pattern should be followed for creating your test case.
The following topics will be covered in this session:
1. Why Use Page Object Model(POM)?
2. What Is Page Object Model?
3. What Is Page Factory?
4. Demo: Creating POM & Page Factory
This presentation demonstrates general guidelines how to create good test cases using Robot Framework. Both good practices and anti-patterns are presented.
The presentation is hosted on GitHub where you can find the original in ODP format: https://github.com/robotframework/DosDontsSlides
by Nader Dabit, Developer Advocate, AWS
We want to complement our awesome web site with an equally awesome mobile application for both iOS and Android that can be deployed from the mobile app stores. In this session, Nader Dabit will take you from Hello World to building a beautiful responsive mobile application using React Native.
Devops core principles
CI/CD basics
CI/CD with asp.net core webapi and Angular app
Iac Why and What?
Demo using Azure and Azure Devops
Docker why and what ?
Demo using Azure and Azure Devops
Kubernetes why and what?
Demo using Azure and Azure Devops
Are you using the best architecture? Want to know how to make sure you are architecting things properly? Interested to learn where the new library features fit in? Come to this session to learn more.
This document summarizes the major changes and new features introduced in each version of Java from Java 8 to Java 17. It discusses key enhancements like modules in Java 9, switch expressions in Java 12, text blocks in Java 13, records and pattern matching in Java 14, sealed classes in Java 15 and strong encapsulation in Java 16. It also provides code examples to illustrate many of the new Java features.
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Edureka!
This tutorial on Selenium will help you understand what is Page Object Model (POM) and Page Factory? You will also understand why POM design pattern should be followed for creating your test case.
The following topics will be covered in this session:
1. Why Use Page Object Model(POM)?
2. What Is Page Object Model?
3. What Is Page Factory?
4. Demo: Creating POM & Page Factory
This presentation demonstrates general guidelines how to create good test cases using Robot Framework. Both good practices and anti-patterns are presented.
The presentation is hosted on GitHub where you can find the original in ODP format: https://github.com/robotframework/DosDontsSlides
by Nader Dabit, Developer Advocate, AWS
We want to complement our awesome web site with an equally awesome mobile application for both iOS and Android that can be deployed from the mobile app stores. In this session, Nader Dabit will take you from Hello World to building a beautiful responsive mobile application using React Native.
Devops core principles
CI/CD basics
CI/CD with asp.net core webapi and Angular app
Iac Why and What?
Demo using Azure and Azure Devops
Docker why and what ?
Demo using Azure and Azure Devops
Kubernetes why and what?
Demo using Azure and Azure Devops
This document summarizes Robot Framework, an open source test automation framework that uses a tabular syntax for creating test cases. It supports keyword-driven, data-driven, and behavior-driven testing approaches. Robot Framework outputs easy-to-read logs and reports in HTML format and supports testing applications independently of platform or language. It also allows creating custom test libraries and has built-in support for Selenium web testing. The document provides examples of test cases and keywords written using Robot Framework's syntax.
This document introduces React Native, a framework for building mobile apps using React. It allows building Android and iOS apps with shared code. React Native uses a virtual DOM for fast rendering. Components manage state and receive data through props. Lifecycle methods handle mounting, updating, and unmounting. Setting up requires Node.js, React Native CLI, and Android Studio or Xcode. Hot reloading, Flexbox layouts, and libraries like Lottie and React Navigation make development easier.
This document discusses clean architecture, which aims to separate an application into distinct layers. The core application logic is separated from the user interface and database access. This improves testability and flexibility. Some benefits of clean architecture include excellent testability since each component can be tested in isolation, clearly defined separation of concerns, and flexibility to change parts of the application independently. However, there are also costs like increased complexity with more classes and data conversions between layers.
Automated testing helps eliminate tasks that are too time-consuming and laborious to be performed manually but there are many challenges when apply automation testing for your project.
In order to crack all these challenges, in this article, I will not only show you how to create test case and execute automation test in 3 easy steps but also the solution to manage test & reports efficiently.
Source: https://medium.com/@testautomation/execute-automation-testing-3-steps-158bdfc45a12
Selenium 4 with Simon Stewart [Webinar]BrowserStack
BrowserStack hosted Simon Stewart, creator of WebDriver and core-contributor to the Selenium project for a webinar on the 18th of June. Simon spoke about Selenium 4, the upcoming Selenium upgrade.
Simon covered various topics like the philosophy behind the upgrade and what it means for the QA community. Here's the webinar, along with the transcript.
Organisations turn to Agile and DevOps to improve customer experience by maximising the speed of delivery without sacrificing quality. As the champions of quality, testers achieve this goal through continuous testing. Test Automation plays a major role in continuous testing; it is the backbone of the continuous test process. To achieve continuous testing, automation must be applied at every stage of the development process. Developing a smart automation strategy and using the right tools is critical in achieving continuous testing since test scripts must be scalable and easy to maintain.
Angular server side rendering - Strategies & Technics Eliran Eliassy
Server Side Rendering (SSR) involves running and serving an Angular application from the server. This provides benefits like fast initial loading, SEO/crawlability since search engines can't run JavaScript. The document discusses SSR strategies like partial rendering and avoiding duplicate requests. It also covers challenges like unsupported features and outlines steps to implement SSR like generating a Universal module and rendering on the server with Express. SSR can improve performance but requires more complex setup and deployment.
Next.js vs React | what to choose for frontend development_ForceBolt
Vercel built the Next.js framework. It's free and open-source, built on Node.js and Babel, and it works with React to create single-page apps. This simplifies server-side rendering.
本議程將要來聊聊 Angular v16 裡開始才有的 「Signal」。首先,我會簡單帶大家認識一下 Angular 和 Signal 的基本概念,以及它能為我們的開發帶來哪些好處。接著,我們要深入了解(其實由於時間關係,只能淺淺了解) Signal 在 Angular 中的實作。最後,透過一個實戰的範例,讓大家看看如何運用 Signal 來輕鬆搞定資料更新和元件之間的溝通。無論你是新手還是老手,這個議程都能讓你對 Angular 和 Signal 機制有更深刻的認識!
Excited about the new reactive web features? Come to this session to learn some of the best practices to make sure that you get started on the right foot.
The document describes a hybrid automation testing framework that combines both keyword-driven and data-driven testing. The hybrid framework provides modularity through nesting of test scripts and reusable library files. It supports multiple projects, test cases, automatic regression testing, and generates detailed email and log reports. The framework architecture includes layers for the core framework, applications, and components like scenario drivers, script drivers, object repositories, test data, and reusable functions. Test execution involves loading the scenario, executing scripts and keywords, logging results, and generating detailed reports.
Automation Abstractions: Page Objects and BeyondTechWell
When you start writing automation for your projects, you quickly realize that you need to organize and design the code. You will write far more than “test” code; you also will write abstraction code because you want to make tests easier to read and maintain. But how do you design all this code? How do you organize and structure it? Should you use a domain specific language? Should you go keyword driven or use Gherkin? Should you use page objects with POJO or Factories? Do you create DOM level abstractions? Where do domain models fit in? Alan Richardson provides an overview of options available to you when modeling abstraction layers. Based on his experience with many approaches on real-world commercial projects, Alan helps you understand how to think about the modeling of abstraction layers. Illustrated with a number of code examples, Alan shows you a variety of approaches and discusses the pros and cons associated with each.
The document discusses infrastructure as code best practices on AWS. It provides an overview of using AWS CloudFormation to define infrastructure in code. AWS CloudFormation allows infrastructure to be provisioned in an automated and repeatable way using templates that are version controlled like code. The document outlines the key components of a CloudFormation template including parameters, mappings, resources, outputs and conditionals. It also discusses using CloudFormation to bootstrap applications on EC2 instances.
GraphQL is a query language for APIs and a runtime for fulfilling those queries. It gives clients the power to ask for exactly what they need, which makes it a great fit for modern web and mobile apps. In this talk, we explain why GraphQL was created, introduce you to the syntax and behavior, and then show how to use it to build powerful APIs for your data. We will also introduce you to AWS AppSync, a GraphQL-powered serverless backend for apps, which you can use to host GraphQL APIs and also add real-time and offline capabilities to your web and mobile apps. You can follow along if you have an AWS account – no GraphQL experience required!
Level: Beginner
Speaker: Rohan Deshpande - Sr. Software Dev Engineer, AWS Mobile Applications
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
Jest is a JavaScript testing framework that allows for unit testing JavaScript code. It provides features like mocking functions, testing asynchronous code with promises and async/await, and snapshot testing. Jest can integrate with other tools like Webpack and Enzyme and provides advanced features like testing multiple projects at once and built-in code coverage.
We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
There's another talk about Clean Architecture, SOLID, and our approach at InfoJobs. If you need the slides, don't hesitate to fork https://github.com/schibsted-android-training/workshop-5
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...Alan Richardson
This document provides an overview of a half-day tutorial on building abstraction layers for web automation tests using Selenium WebDriver. The tutorial will cover common approaches to modeling web applications and constructing page object and other abstraction layers. Attendees will participate in exercises to experiment with different abstraction techniques using a sample todo list application. The session will discuss topics like page object design, element abstractions, domain objects, and component abstractions. Code examples demonstrating various abstraction implementations will also be presented and analyzed.
Creating automated functional tests of your web application with Selenium IDE is quick and easy, but leads to massive duplication in your test scripts. See why this duplication is a problem, and how to address it using a simple design pattern called the Page Object.
This document summarizes Robot Framework, an open source test automation framework that uses a tabular syntax for creating test cases. It supports keyword-driven, data-driven, and behavior-driven testing approaches. Robot Framework outputs easy-to-read logs and reports in HTML format and supports testing applications independently of platform or language. It also allows creating custom test libraries and has built-in support for Selenium web testing. The document provides examples of test cases and keywords written using Robot Framework's syntax.
This document introduces React Native, a framework for building mobile apps using React. It allows building Android and iOS apps with shared code. React Native uses a virtual DOM for fast rendering. Components manage state and receive data through props. Lifecycle methods handle mounting, updating, and unmounting. Setting up requires Node.js, React Native CLI, and Android Studio or Xcode. Hot reloading, Flexbox layouts, and libraries like Lottie and React Navigation make development easier.
This document discusses clean architecture, which aims to separate an application into distinct layers. The core application logic is separated from the user interface and database access. This improves testability and flexibility. Some benefits of clean architecture include excellent testability since each component can be tested in isolation, clearly defined separation of concerns, and flexibility to change parts of the application independently. However, there are also costs like increased complexity with more classes and data conversions between layers.
Automated testing helps eliminate tasks that are too time-consuming and laborious to be performed manually but there are many challenges when apply automation testing for your project.
In order to crack all these challenges, in this article, I will not only show you how to create test case and execute automation test in 3 easy steps but also the solution to manage test & reports efficiently.
Source: https://medium.com/@testautomation/execute-automation-testing-3-steps-158bdfc45a12
Selenium 4 with Simon Stewart [Webinar]BrowserStack
BrowserStack hosted Simon Stewart, creator of WebDriver and core-contributor to the Selenium project for a webinar on the 18th of June. Simon spoke about Selenium 4, the upcoming Selenium upgrade.
Simon covered various topics like the philosophy behind the upgrade and what it means for the QA community. Here's the webinar, along with the transcript.
Organisations turn to Agile and DevOps to improve customer experience by maximising the speed of delivery without sacrificing quality. As the champions of quality, testers achieve this goal through continuous testing. Test Automation plays a major role in continuous testing; it is the backbone of the continuous test process. To achieve continuous testing, automation must be applied at every stage of the development process. Developing a smart automation strategy and using the right tools is critical in achieving continuous testing since test scripts must be scalable and easy to maintain.
Angular server side rendering - Strategies & Technics Eliran Eliassy
Server Side Rendering (SSR) involves running and serving an Angular application from the server. This provides benefits like fast initial loading, SEO/crawlability since search engines can't run JavaScript. The document discusses SSR strategies like partial rendering and avoiding duplicate requests. It also covers challenges like unsupported features and outlines steps to implement SSR like generating a Universal module and rendering on the server with Express. SSR can improve performance but requires more complex setup and deployment.
Next.js vs React | what to choose for frontend development_ForceBolt
Vercel built the Next.js framework. It's free and open-source, built on Node.js and Babel, and it works with React to create single-page apps. This simplifies server-side rendering.
本議程將要來聊聊 Angular v16 裡開始才有的 「Signal」。首先,我會簡單帶大家認識一下 Angular 和 Signal 的基本概念,以及它能為我們的開發帶來哪些好處。接著,我們要深入了解(其實由於時間關係,只能淺淺了解) Signal 在 Angular 中的實作。最後,透過一個實戰的範例,讓大家看看如何運用 Signal 來輕鬆搞定資料更新和元件之間的溝通。無論你是新手還是老手,這個議程都能讓你對 Angular 和 Signal 機制有更深刻的認識!
Excited about the new reactive web features? Come to this session to learn some of the best practices to make sure that you get started on the right foot.
The document describes a hybrid automation testing framework that combines both keyword-driven and data-driven testing. The hybrid framework provides modularity through nesting of test scripts and reusable library files. It supports multiple projects, test cases, automatic regression testing, and generates detailed email and log reports. The framework architecture includes layers for the core framework, applications, and components like scenario drivers, script drivers, object repositories, test data, and reusable functions. Test execution involves loading the scenario, executing scripts and keywords, logging results, and generating detailed reports.
Automation Abstractions: Page Objects and BeyondTechWell
When you start writing automation for your projects, you quickly realize that you need to organize and design the code. You will write far more than “test” code; you also will write abstraction code because you want to make tests easier to read and maintain. But how do you design all this code? How do you organize and structure it? Should you use a domain specific language? Should you go keyword driven or use Gherkin? Should you use page objects with POJO or Factories? Do you create DOM level abstractions? Where do domain models fit in? Alan Richardson provides an overview of options available to you when modeling abstraction layers. Based on his experience with many approaches on real-world commercial projects, Alan helps you understand how to think about the modeling of abstraction layers. Illustrated with a number of code examples, Alan shows you a variety of approaches and discusses the pros and cons associated with each.
The document discusses infrastructure as code best practices on AWS. It provides an overview of using AWS CloudFormation to define infrastructure in code. AWS CloudFormation allows infrastructure to be provisioned in an automated and repeatable way using templates that are version controlled like code. The document outlines the key components of a CloudFormation template including parameters, mappings, resources, outputs and conditionals. It also discusses using CloudFormation to bootstrap applications on EC2 instances.
GraphQL is a query language for APIs and a runtime for fulfilling those queries. It gives clients the power to ask for exactly what they need, which makes it a great fit for modern web and mobile apps. In this talk, we explain why GraphQL was created, introduce you to the syntax and behavior, and then show how to use it to build powerful APIs for your data. We will also introduce you to AWS AppSync, a GraphQL-powered serverless backend for apps, which you can use to host GraphQL APIs and also add real-time and offline capabilities to your web and mobile apps. You can follow along if you have an AWS account – no GraphQL experience required!
Level: Beginner
Speaker: Rohan Deshpande - Sr. Software Dev Engineer, AWS Mobile Applications
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
Jest is a JavaScript testing framework that allows for unit testing JavaScript code. It provides features like mocking functions, testing asynchronous code with promises and async/await, and snapshot testing. Jest can integrate with other tools like Webpack and Enzyme and provides advanced features like testing multiple projects at once and built-in code coverage.
We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
There's another talk about Clean Architecture, SOLID, and our approach at InfoJobs. If you need the slides, don't hesitate to fork https://github.com/schibsted-android-training/workshop-5
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...Alan Richardson
This document provides an overview of a half-day tutorial on building abstraction layers for web automation tests using Selenium WebDriver. The tutorial will cover common approaches to modeling web applications and constructing page object and other abstraction layers. Attendees will participate in exercises to experiment with different abstraction techniques using a sample todo list application. The session will discuss topics like page object design, element abstractions, domain objects, and component abstractions. Code examples demonstrating various abstraction implementations will also be presented and analyzed.
Creating automated functional tests of your web application with Selenium IDE is quick and easy, but leads to massive duplication in your test scripts. See why this duplication is a problem, and how to address it using a simple design pattern called the Page Object.
Page Objects Done Right - selenium conference 2014Oren Rubin
The document discusses page object design patterns for test automation. It describes four main steps: 1) Expose the service or page being tested rather than using WebDriver APIs directly in tests. 2) Eliminate random sleeps by adding wait methods. 3) Support different users by overloading methods or using parameters. 4) Initialize page objects using a page factory to avoid duplicating lookup code. It also discusses using coordinators to synchronize tests by waiting for events from the application under test.
The document discusses moving beyond traditional page object models for testing dynamic web applications. It proposes modeling the UI with smaller "page components" that use method chaining and return types to better reflect the user experience. It also suggests using a component factory and locators to simplify test code and address issues like synchronization. The goal is to make tests more readable, reusable and robust as applications become more interactive.
Better Page Object Handling with Loadable Component PatternSargis Sargsyan
This document discusses using the Loadable Component pattern to improve page object handling in Selenium tests. It introduces the LoadableComponent and SlowLoadableComponent classes, which are designed to make page objects less brittle by ensuring pages are fully loaded before interacting with elements. This approach reduces boilerplate code and makes tests easier to maintain. The document also covers common failures like brittle tests, not building a framework properly, and not using explicit waits, as well as tips for continuous integration of automated tests.
This document discusses various code smells and anti-patterns that can occur when writing unit tests, such as duplication, overuse of dependencies, lack of cohesion/coupling, fragile tests, and not following good object-oriented design principles. It provides examples of each smell and recommends practices like using fixtures, single responsibility tests, and test data builders to avoid these issues and make tests easier to write and maintain.
Applying Innovation at different levels of abstractionJathish MJ
PCAPE Innovation aims to apply innovation at different levels of abstraction including business model innovations, functional or strategic innovations that redefine systems, and module level innovations.
Test automation efforts often result in failure or lack of long term commitment due to complexity and costs associated with maintaining test scripts. When testers find it difficult to construct, execute, or update scripts, expectations of management are not realized, resullting in project termination. We avoided test automation failure by utilizing an innovative framework which reduces maintenance burdens associated with test scripts while increases user productivity.
1) Embedded computing systems are programmable computers designed for specialized applications rather than general-purpose use. They are found in devices like cell phones, cars, appliances.
2) Early embedded systems date to the 1940s but microprocessors enabled more complex embedded applications starting in the 1970s. Modern vehicles can have over 100 microprocessors controlling various functions.
3) Embedded system design faces challenges like meeting deadlines, minimizing power consumption, and tight design timelines with small teams. Methodical design processes help address these challenges.
Is Abstraction the Key to Artificial Intelligence? - Lorenza SaittaWithTheBest
With this comprehensive breakdown of abstraction's multiple layers and components, we can understand and answer the question if abstraction is essential to artificial intelligence.
Lorenza Saitta, Università del Piemonte Orientale
In this talk I'm going to focus on the technical aspects of 'test automation', using examples of approaches from a variety of Agile projects where we automated APIs, and GUIs. You'll learn about the use of abstractions and how to think about modeling the system in code to support automating it. Also how to use these abstractions to support stress testing, exploratory testing, ongoing CI assertions and the testing process in general. I'll also discuss the different styles of coding used to support automating tactically vs automating strategically.
Test Automation Day 2015 Keynote Alan Richardson - Practical Lessons Learned ...Alan Richardson
Practical Lessons Learned Automating in Testing.
Let us forget theory for a moment, and concentrate on the practice of automation. Alan will describe lessons learned from both success and failure;
as a tester, an automator, and a manager. But more importantly, you will discover how to apply these lessons and improve your automation.
Learn how to stay focused, how to experiment and still add value, how to manage even if you cannot code, and more...
Gael Fraiteur argues that multithreaded programming needs to be addressed at the right level of abstraction, with design patterns like Actor, Immutable, Freezable, Thread Affine, Reader-Writer-Synchronized. Design patterns form a language and serve as a model against which code can be expressed. Compilers must support design patterns to allow code to be deterministically validated against the model, and of course to generate the low-level instructions that would be otherwise written manually.
This document outlines Alan Richardson's webinar on technical testing. It discusses why technical testing is important given increasing technical complexity. It describes what technical testing entails, such as understanding databases and code. The document provides examples of technical testing concepts like boundary value analysis. It also discusses how to identify technical testing and what barriers may exist, emphasizing personal motivation. Finally, it suggests that with the right approach, anyone can learn technical testing and offers resources for further reading.
This document discusses the perils of using the page object pattern for test automation frameworks. It describes the page object pattern, how it can be used to model pages in code and reduce duplication. However, it also notes limitations like tests becoming too implementation focused rather than intent focused. It then introduces a business layer page object pattern that aims to address these limitations by validating business requirements and separating concerns with abstraction layers. This allows the test pyramid to remain balanced and makes maintenance and scaling easier.
I attended the Tabara de Testare testing group on 3rd February 2015 to present "Lessons Learned When Automating. A live stream from UK to Romania.
http://compendiumdev.co.uk/page/tabaradetestare201602
I've been asked some very challenging questions about lessons learned, and how decisions are made during the process of automating and performing technical testing. In this webinar I'm going to answer them based on my experience. We'll discus how we know 'what to automate' which means we have to split our analysis into 'detection' and 'testing'. We'll cover lessons learned from solving problems, and making mistakes, and steps we can take during the problem solving process e.g. for intermittent failures, and possible tool bugs. We'll discuss abstraction levels and the different levels of the technology stack to automate: how to do it, and how we make the decisions. We'll discuss coding primarily the differences, and the overlap, between the needs for coding for testing and coding for production deployment. We'll also cover some WebDriver specific answers to some of these questions. I'm also going to describe books and techniques that have helped me over the years when trying to deal with these questions on production projects.
Challenges in automation which testers face often lead to subsequent failures. Learn how to respond to these common challenges by developing a solid business case for increased automation adoption by engaging manual testers in the testing organization, being technology agnostic, and stabilizing test scripts regardless of applications changes.
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...Iakiv Kramarenko
Three simple approaches for implementing web UI automation were discussed: PageObjects, LoadableComponents, and PageUtils. PageObjects use object-oriented inheritance but can become complex. LoadableComponents encapsulate page loading logic but may lead to overcomplicated hierarchies. PageUtils use a procedural approach with functions to represent pages and elements, avoiding complexity while enabling easy tests. Functional programming concepts like higher-order functions can help address lack of DRYness in the procedural approach. The best approach depends on the project needs in terms of teaching others, speed of development, and ability to handle future changes.
Presented at Bucharest Java User Group, http://www.bjug.ro/editii/5.html . Project source code available at: https://github.com/bucharest-jug/dropwizard-todo
Top100summit 谷歌-scott-improve your automated web application testingdrewz lin
This document discusses improving automated web application testing. It begins with an introduction and agenda. Some key points:
- Testing at Google expects test code quality to match production code quality. Tests must be maintainable and meet engineering standards.
- The present focuses on Selenium/WebDriver automation best practices and things to avoid. Base classes and locator organization can help improve test robustness and maintainability.
- The future may include more exploratory testing tools like WebTestingExplorer for automated exploratory testing.
Overall the document provides guidance on using Selenium/WebDriver for web application testing in a best practices way, focusing on test code quality, maintainability, and anticipating future changes. It emphasizes organizing tests through
Node.js and Selenium Webdriver, a journey from the Java sideMek Srunyu Stittri
** Update **
There is now an updated version of this implementation with Javascript Async/Await
Recording - https://www.youtube.com/watch?v=BTpMB2-8qMM
Slides - https://www.slideshare.net/MekSrunyuStittri/endtoend-test-automation-with-nodejs-one-year-later
Abstract
With the growing popularity of NodeJS, many companies have embraced its adoption and gone full stack. The next logical move is to have the test framework be on the same stack. Unfortunately, proven ways of implementing a Selenium framework in JavaScript are very limited and very much fragmented.
Airware builds software and hardware for commercial drones; their cloud team ships code to production every week. In this talk, their cloud automation team will talk about: how they have built their Selenium framework with Node.js; the challenges of coming from a synchronous programming language like Java; lessons learned along this journey; and other technologies/tools used to complement testing their cloud and rolling out quality.
Recording by New Relic and SauceLabs - https://www.youtube.com/watch?v=CqeCUyoIEo8
Selenium RC: Automated Testing of Modern Web Applicationsqooxdoo
This talk is concerned with automated testing of Web applications. It
looks at testing Web apps in general, its goals and challenges; it will
present Selenium and Selenium RC in particular as a testing platform;
and will then focus on adaptions made to Selenium to ease the effort
to test apps made with qooxdoo, a JavaScript framework.
Selenide is simple and powerful in use wrapper-library over Selenium. But what the point just of shorter lines of code? In this talk we will see how to tame your webui mustang with Selenide and put it into fence of simple BDD stories with Easyb. We also consider pros and cons of the approach and compare to available alternatives.
This document discusses web UI testing in Scala using Selenium. It recommends Selenium for cross-browser and cross-platform testing. Tests can be run continuously using Jenkins. The Page Object pattern is advocated to model pages without exposing implementation details. Examples show initializing the WebDriver, defining PageObjects that represent pages, and writing a test that logs in and navigates to the user management page.
The document discusses automated testing of web applications. It presents different approaches to web testing including GUI automation, HTML automation, and DOM automation. Selenium RC is introduced as a testing platform that uses DOM automation. Selenium RC allows tests to be run programmatically across browsers and platforms. It can be extended with custom commands and locators to better suit specific applications like ones built with the JavaScript framework qooxdoo.
The slides I was using when delivering my talk about how to develop hybrid applications using WordPress.
More information about the FED course I deliver can be found at fed.course.lifemichael.com
Improving Your Selenium WebDriver Tests - Belgium testing days_2016Roy de Kleijn
The document discusses improving Selenium WebDriver tests. It identifies common issues like synchronization problems and flaky tests. It recommends implementing the Page Object Model to organize test code and using data objects. It also suggests techniques like implicit waits and custom waits to handle synchronization, running tests in parallel using Docker Selenium, and using attribute selectors instead of fragile XPath locators. The document concludes with lessons on avoiding Thread.sleep(), mocking interfaces, and setting up clean test environments.
Javascript unit testing, yes we can e bigAndy Peterson
This document discusses test-driven development for JavaScript using ScrewUnit and BlueRidge. It introduces the Carbon Five consulting firm and covers why JavaScript unit testing is important. It then demonstrates how to write behavioral tests using ScrewUnit's BDD style and shows a live example testing a wizard component. Some challenges of JavaScript testing like DOM cleanup and structure are addressed. The document emphasizes that JavaScript testing is possible and can be integrated into the development process.
The WebView Role in Hybrid ApplicationsHaim Michael
This document provides an overview of using WebView in hybrid mobile applications. It discusses how WebView allows embedding web content in native apps and describes how to load URLs, enable JavaScript, and handle events. It also covers interacting between JavaScript and Java code, debugging with Chrome DevTools, and frameworks like PhoneGap that simplify hybrid app development. Resources for further learning include the PhoneGap and Android developer websites.
This document provides an overview and agenda for a workshop on getting started with ReactJS. The workshop will cover React components, component state and properties, component references and events, and React Router. It will discuss how React originated at Facebook and Instagram and uses a declarative view library approach. The virtual DOM and how it diffs changes to efficiently update the DOM is also highlighted.
Main instruments used for Web UI test automation.
Drivers: Selenium WebDriver, Sikuli X.
Frameworks: PageFactory, TestNG.
Other tools: Apache Ant, Jenkins CI.
How to implement an app for web, iOS, Android with virtually same code and all the proper bells and whistles: Analytics, Sharing buttons, AdSense/AdMob ads.
Presented at PiterJS meetup on 09 Feb 2017
The document discusses strategies for testing a web application, including:
- Using static analysis tools like FindBugs to analyze source code.
- Using QUnit to test JavaScript functions and refactoring code to make it testable.
- Using Selenium to automate UI testing and catch bugs by verifying page content.
- Implementing continuous integration using an existing Cruise Control server to automatically run tests.
This document discusses automated testing with Selenium WebDriver and the page object pattern. It provides an overview of automated testing benefits and challenges. The document then explains Selenium, including that it automates web browsers rather than being a test framework. It introduces the page object pattern to reduce duplicated code and encapsulate page internals. Finally, it demonstrates the pattern with an example login page object and discusses Selenium support for initializing page objects.
The document discusses ditching JQuery for vanilla JavaScript. It describes how to perform common tasks like DOM manipulation, events, and AJAX calls without JQuery. While JQuery hides browser differences and simplifies code, understanding vanilla JavaScript makes developers better. The presenter provides examples of equivalent code for querying elements, adding events, and making requests. Polyfills can add missing browser functionality. While JQuery is still useful for old browsers, vanilla JavaScript offers more control and flexibility over the long run.
JQuery is awesome, but with all major browsers following the ES and HTML5 specs, the library has become more of a convenience than a necessity for browser compatibility. While the library is useful and ubiquitous, it does distract us from learning the language that it's built on. This talk will outline functionalities that pure javascript provides, and also provide steps we can take to begin writing vanilla javascript applications and start appreciating the power and uniqueness of javascript.
Similar to Automation Abstraction Layers: Page Objects and Beyond (20)
Add More Security To Your Testing and Automating - Saucecon 2021Alan Richardson
Presented at SauceCon 2021, April.
More details: https://www.eviltester.com/conference/saucecon2021_conference/
Security Testing is a highly technical set of skills, covering a wide domain of knowledge that can take a long time to learn and gain proficiency. We already have enough to learn with Software Testing and even more when we add in Automating. So are there any simple ways to increase the scope of what we already do, that provide more insight into the security of our application? Answer: Yes. And in this talk we will cover practical steps, dos and don’ts to add some Security focus fast, without spending years learning how to Hack applications.
Much of the automating we do to support testing involves detecting change. Once our tests pass, they fail when the system changes and the automated execution alerts us to the change. There are other ways that automating can help us.
Open source tools - Test Management Summit - 2009Alan Richardson
This document discusses open source and free test tools. It begins by defining a test tool as software used to augment the testing process. It then asks participants which tools they use, both open source/free tools like Selenium and commercial tools like Jira. The document explores reasons for using open source tools like cost and customization versus commercial tools like support. Finally, it discusses trends in commercial vs open source tools and strategies for effective tool usage.
Automating Tactically vs Strategically SauceCon 2020Alan Richardson
One of the biggest concepts that has made a difference to my programming and automating in recent years is the concept of “Tactical vs. Strategic.” Automating tactically might be for a specific purpose, possibly small, possibly a bit rough around the edges, not necessarily completely robust for everyone, etc. And Strategic automation is more critical to long-term aims, maintained and maintainable, etc.
In this talk, Alan Richardson will provide examples of automating both Strategically and Tactically for activities as diverse as supporting testing, marketing and general life. We will also consider how and when to move from automating tactically to strategically, and how the concept has helped me change my programming style and how to write better code.
The recording in https://eviltester.com/talks has:
- longer practice session recording
- live recording - local recording better quality
- 8 bonus recordings with an extra hour of material
- will automation take over
- impact of buzzwords
- how to cope with trends
- contextual problem solving
- information about the references
- exercises
- behind the scenes look at how the talk was prepared and tools used
- transcripts
- subtitles
DevFest 14th Dec 2019 Bishkek
- Alan Richardson
https://www.eviltester.com/conference/devfestbishkek2019_conference
- EvilTester.com
- @EvilTester
- CompendiumDev.co.uk
---
Have you ever wondered how other people test applications? Not in theory, but in practice? What thought processes are used? How did they model the application? What tools were used? How did they track the testing? That's what this talk is all about. This talk will be based on a short Case Study of testing an open source web application. Why open source? Because then there is no commercial confidentiality about the process, tools or thought processes.
---
Alan will explain his thought processes, coverage, approaches, tools used, risks identified and results found. And generalise from this into reusable models and principles that can be applied to your testing. This covers the What?, and the Why? of practical exploratory web testing.
Secrets and Mysteries of Automated Execution Keynote slidesAlan Richardson
Test Automation, Programming Automation, Automated Execution. This presentations contains some high level models, abstractions and approaches for effective, non-flakey and maintainable automation.
https://www.eviltester.com
# Automating Pragmatically
Testival Meetup 20190604
## Alan Richardson
- EvilTester.com
- @EvilTester
- compendiumdev.co.uk
- digitalonlinetactics.com
---
~~~~~~~~
Title: Automating Pragmatically
The online discussions of automating can leave me confused.
- Should you automate through the GUI?
- Should GUI automating be banned?
- Do all testers need to code? Is automating part of testing
or not?
- Do we need to automate to get a job?
In this short session Alan will discuss automating
from a pragmatic and contextual position and
share how he thinks about automating.
~~~~~~~~
Joy of Coding Conference 2019 slides - Alan RichardsonAlan Richardson
Adventures in Testing, Programming, Teaching, Automating and Marketing
When you already know how to code, it's easy to forget how hard some of that learning was... until you have to teach people. And if all you've ever built are applications, you don't know really know the nuances of writing code to automate them. And if you've written the code but never had to market the applications then you've not really experienced the full joy of coding.
In this presentation Alan will revisit many of his past projects to identify lessons learned. Lessons from: writing commercial and open source tools, multi-user adventure games, REST APIs, test automation, automating applications to make them do things they are not supposed to do, and coding for technical marketing.
Some lessons we will learn:
* The 'install' is the hardest part
* Writing frameworks is too much fun and should be banned
* Applications are just "code calling other libraries"
* Writing a Text Adventure s the most fun and educational thing you'll ever code
* The Dangers of knowing how to code
We will also learn the dangers of knowing how to code and discover how our coding skills can give us an edge, in business and online live in general, if we choose to harness our skills to improve our daily experiences.
Programming katas for Software Testers - CounterStringsAlan Richardson
What would be suitable Code Katas for people wanting to learn how to code to support their testing?
CounterStrings
- `*3*5*7*9*12*15*`
A CounterString is a string like this `*3*5*7*9*12*15*` where the `*` represent the position in the string of the number immediately proceeding it. This is a 15 character CounterString.
These are useful because if you paste them into a field, and are truncated then it is easy to see what they were truncated to, it is as James Bach describes it, self documenting test data.
https://www.eviltester.com/blog/eviltester/2019-02-27-programming-katas-for-testers/
Slides for Agile Testers Conference 2018
Technology Based Testing by Alan Richardson
What do you learn if you want to test 'beyond the acceptance criteria'? Technical risk based testing can help. In this case I'm going to use the phrase Technical Testing to cover: "identify technology based risks to drive testing". This thought process can help us make informed decisions about the scope of exploratory testing we will carry out. It also helps focus your studies on the technical knowledge appropriate for the project you are testing.
## Blurb
This requires:
- understanding of the technology
- risk identification
- tools applicable to the technology
This presentation will use a simple example to demonstrate that:
- Even simple technology can pose risk
- Combining simple technology can increase risk
- Understanding technology allows us to evaluate risk
* http://www.eviltester.com
* http://www.compendiumdev.co.uk
* https://twitter.com/eviltester
About Consultant Alan Richardson Compendium Developments Evil TesterAlan Richardson
Compendium Developments Ltd is a software consultancy company that provides hands-on assistance and expertise to help software development teams test and improve their software through pragmatic solutions. They offer plain speaking advice based on experience to quickly solve clients' unique problems and guide them to make the right decisions for their situation. The company website provides additional information and ways to connect through social media platforms.
What is Shift Left Testing? Do you need to use that term to improve your Software Testing and Development process? I don't think so.
- why I don't use the term Shift Left
- Explanation of what Shift Left means when people use it
- Explanation of what Shift Left might mean when people hear it
- How to Shift Left incorrectly
- How to improve your test process without using the phrase Shift Left.
Hire me for consultancy and buy my online books and training at:
- https://compendiumdev.co.uk
- http://eviltester.com
- http://seleniumsimplified.com
- http://javafortesters.com
Have you ever wished that you had a worked example of how to test a REST API?
Not just automate the API, but how to interact with it with command line tools, and GUI tools to support your manual interactive testing. And then take your testing forward into automating the API?
That's what this book provides.
Read the 74 page sample and find out more information on the book page.
https://www.compendiumdev.co.uk/page/tracksrestapibook
The full book has over 200 pages of actual hands on case study information that can improve your testing and automating of REST API based applications.
Technical and Testing Challenges: Using the "Protect The Square" GameAlan Richardson
How good are your Technical Testing in the Browser and JavaScript skills? Put them to the test with the "Protect The Square" game.
https://www.compendiumdev.co.uk/games/buggygames/protect_the_square/protect_the_square.html
TDD - Test Driven Development - Java JUnit FizzBuzzAlan Richardson
A short example Test Driven Development session where I code FizzBuzz.
FizzBuzz is often used as a programming interview question and as a Kata for practicing your coding.
The GitHub code repository with the Java code for this exercise is available at:
https://github.com/eviltester/fizzbuzz
Read the blog post for the video:
http://blog.eviltester.com/2018/03/tdd-test-driven-development-java-junit.html
Slides for Automation Guild 2016 Conference
If you want to automate, you learn to code, and you learn to code well.
“Automate” doesn’t mean “Automate Testing” it means “Automate part of your test process”.
You need to learn to code to do that with the most options open to you.
We’ll look at some ‘we do this alot’ and ‘we want to automate’ activities which we can use tools for. But we’ll also see that we are limited by the tools.
When we code, we can do a lot with minimum code, and gain a lot more flexibility.
Then we’ll cover how to think about learning to code.
solve a problem quickly (automate tactically)
solve a problem for the long term (automate strategically)
To work strategically we need to learn:
to code well,
understand refactoring,
libraries vs frameworks,
abstractions,
etc.
This talk isn’t just for beginners, we’ll cover stuff that should make it useful for the experts in the audience.
We’ll cover a lot in 45 mins, with code examples and tool examples, and I’ll make it all pretty practical.
For more details visit:
https://www.compendiumdev.co.uk/page/tag2017
My aim here is to tell you that I learned to work with Agility rather than work with the Agile Rituals and Definitions. And I learned to trust that working with Agility trumps Rituals and Definitions the hard way. Because sticking to rituals and definitions led to rigidity, rather than agility.
And then "What does testing look like when you adopt that mindset?"
In this presentation you will short cut your learning on the topic of Agility, so you understand "What does testing look like when you adopt an Agility mindset?". Applying this mind set naturally leads to incorporating exploratory testing, technical testing, automated execution, end to end testing and risk. Adopting this mindset allows you to fit into any Agile Software Development project and create a customized testing approach that works.
Keynote at the internal Rabobank Testing Conference on Feb 15th 2018 in Utrecht.
https://www.compendiumdev.co.uk/page/rabobank201802
Your Automated Execution Does Not Have to be FlakyAlan Richardson
Alan Richardson will present on how to remove intermittent failures from automated test execution. Common causes of intermittency include lack of synchronization, parallel test interference, long running tests, difficulty automating the system under test, outdated tools, uncontrolled test preconditions, incorrect assumptions in assertions, and uncontrolled data. Richardson will provide examples of each cause and recommend solutions such as adding synchronization, isolating test environments, controlling data, and investigating failures rather than assuming tests are "flaky". The goal is to convince attendees that intermittent failures are a result of unresolved issues, not flaws in tests, and can be addressed through proper testing practices.
What is Testability vs Automatability? How to improve your Software Testing.Alan Richardson
Testability is different from Automatability.
- Testability - does the application have features that make it easier for a human to test?
- Automatizability (Automatability) - does the application have features that make it easier to control and interrogate by another application.
You will learn:
- What is Testability?
- What is automatability?
- What is automatizability?
- Adding testability features can introduce risk.
- Features that aid automated execution, can overlap with features that aid testing, but they are not the same.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...kalichargn70th171
In today's fiercely competitive mobile app market, the role of the QA team is pivotal for continuous improvement and sustained success. Effective testing strategies are essential to navigate the challenges confidently and precisely. Ensuring the perfection of mobile apps before they reach end-users requires thoughtful decisions in the testing plan.
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
Odoo releases a new update every year. The latest version, Odoo 17, came out in October 2023. It brought many improvements to the user interface and user experience, along with new features in modules like accounting, marketing, manufacturing, websites, and more.
The Odoo 17 update has been a hot topic among startups, mid-sized businesses, large enterprises, and Odoo developers aiming to grow their businesses. Since it is now already the first quarter of 2024, you must have a clear idea of what Odoo 17 entails and what it can offer your business if you are still not aware of it.
This blog covers the features and functionalities. Explore the entire blog and get in touch with expert Odoo ERP consultants to leverage Odoo 17 and its features for your business too.
An Overview of Odoo ERP
Odoo ERP was first released as OpenERP software in February 2005. It is a suite of business applications used for ERP, CRM, eCommerce, websites, and project management. Ten years ago, the Odoo Enterprise edition was launched to help fund the Odoo Community version.
When you compare Odoo Community and Enterprise, the Enterprise edition offers exclusive features like mobile app access, Odoo Studio customisation, Odoo hosting, and unlimited functional support.
Today, Odoo is a well-known name used by companies of all sizes across various industries, including manufacturing, retail, accounting, marketing, healthcare, IT consulting, and R&D.
The latest version, Odoo 17, has been available since October 2023. Key highlights of this update include:
Enhanced user experience with improvements to the command bar, faster backend page loading, and multiple dashboard views.
Instant report generation, credit limit alerts for sales and invoices, separate OCR settings for invoice creation, and an auto-complete feature for forms in the accounting module.
Improved image handling and global attribute changes for mailing lists in email marketing.
A default auto-signature option and a refuse-to-sign option in HR modules.
Options to divide and merge manufacturing orders, track the status of manufacturing orders, and more in the MRP module.
Dark mode in Odoo 17.
Now that the Odoo 17 announcement is official, let’s look at what’s new in Odoo 17!
What is Odoo ERP 17?
Odoo 17 is the latest version of one of the world’s leading open-source enterprise ERPs. This version has come up with significant improvements explained here in this blog. Also, this new version aims to introduce features that enhance time-saving, efficiency, and productivity for users across various organisations.
Odoo 17, released at the Odoo Experience 2023, brought notable improvements to the user interface and added new functionalities with enhancements in performance, accessibility, data analysis, and management, further expanding its reach in the market.
A neural network is a machine learning program, or model, that makes decisions in a manner similar to the human brain, by using processes that mimic the way biological neurons work together to identify phenomena, weigh options and arrive at conclusions.
Preparing Non - Technical Founders for Engaging a Tech AgencyISH Technologies
Preparing non-technical founders before engaging a tech agency is crucial for the success of their projects. It starts with clearly defining their vision and goals, conducting thorough market research, and gaining a basic understanding of relevant technologies. Setting realistic expectations and preparing a detailed project brief are essential steps. Founders should select a tech agency with a proven track record and establish clear communication channels. Additionally, addressing legal and contractual considerations and planning for post-launch support are vital to ensure a smooth and successful collaboration. This preparation empowers non-technical founders to effectively communicate their needs and work seamlessly with their chosen tech agency.Visit our site to get more details about this. Contact us today www.ishtechnologies.com.au
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLESanfaltahir1010
Image: Include an image that represents the concept of precision, such as a AI helix or a futuristic healthcare
setting.
Objective: Provide a foundational understanding of precision medicine and its departure from traditional
approaches
Role of theory: Discuss how genomics, the study of an organism's complete set of AI ,
plays a crucial role in precision medicine.
Customizing treatment plans: Highlight how genetic information is used to customize
treatment plans based on an individual's genetic makeup.
Examples: Provide real-world examples of successful application of AI such as genetic
therapies or targeted treatments.
Importance of molecular diagnostics: Explain the role of molecular diagnostics in identifying
molecular and genetic markers associated with diseases.
Biomarker testing: Showcase how biomarker testing aids in creating personalized treatment plans.
Content:
• Ethical issues: Examine ethical concerns related to precision medicine, such as privacy, consent, and
potential misuse of genetic information.
• Regulations and guidelines: Present examples of ethical guidelines and regulations in place to safeguard
patient rights.
• Visuals: Include images or icons representing ethical considerations.
Content:
• Ethical issues: Examine ethical concerns related to precision medicine, such as privacy, consent, and
potential misuse of genetic information.
• Regulations and guidelines: Present examples of ethical guidelines and regulations in place to safeguard
patient rights.
• Visuals: Include images or icons representing ethical considerations.
Content:
• Ethical issues: Examine ethical concerns related to precision medicine, such as privacy, consent, and
potential misuse of genetic information.
• Regulations and guidelines: Present examples of ethical guidelines and regulations in place to safeguard
patient rights.
• Visuals: Include images or icons representing ethical considerations.
Real-world case study: Present a detailed case study showcasing the success of precision
medicine in a specific medical scenario.
Patient's journey: Discuss the patient's journey, treatment plan, and outcomes.
Impact: Emphasize the transformative effect of precision medicine on the individual's
health.
Objective: Ground the presentation in a real-world example, highlighting the practical
application and success of precision medicine.
Data challenges: Address the challenges associated with managing large sets of patient data in precision
medicine.
Technological solutions: Discuss technological innovations and solutions for handling and analyzing vast
datasets.
Visuals: Include graphics representing data management challenges and technological solutions.
Objective: Acknowledge the data-related challenges in precision medicine and highlight innovative solutions.
Data challenges: Address the challenges associated with managing large sets of patient data in precision
medicine.
Technological solutions: Discuss technological innovations and solutions
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
Project Management: The Role of Project Dashboards.pdfKarya Keeper
Project management is a crucial aspect of any organization, ensuring that projects are completed efficiently and effectively. One of the key tools used in project management is the project dashboard, which provides a comprehensive view of project progress and performance. In this article, we will explore the role of project dashboards in project management, highlighting their key features and benefits.
Project Management: The Role of Project Dashboards.pdf
Automation Abstraction Layers: Page Objects and Beyond
1. 1
Automation Abstractions:
Page Objects and Beyond
Alan Richardson
@eviltester
https://xp-dev.com/svn/AutomationAbstractions
www.SeleniumSimplified.com
www.EvilTester.com
www.CompendiumDev.co.uk
www.JavaForTesters.com
2. 2
What is Abstraction?
● Modelling
● Separation of concerns
● Logical vs Physical
● Functional vs Structural
● Interfaces vs Implementations
● Data / Entities / Persistence
● Functionality / Task Flow
● Goals / Strategies
● Layers – GUI, DB, HTTP
● Etc.
3. “I must create a system. or be
enslav'd by another Mans; I
will not reason & compare:
my business is to create”
William Blake, 1820
Jerusalem: The Emanation of the Giant Albion
3
http://www.blakearchive.org/exist/blake/archive/object.xq?objectid=jerusalem.e.illbk.10&java=no
4. https://xp-dev.com/svn/AutomationAbstractions
4
Example Test Without
Abstraction
@Before
public void startDriver(){
@Test
public void canCreateAToDoWithNoAbstraction(){
driver.get("http://todomvc.com/architecture-examples/backbone/");
int originalNumberOfTodos = driver.findElements(
By.cssSelector("ul#todo-list li")).size();
WebElement createTodo = driver.findElement(By.id("new-todo"));
createTodo.click();
createTodo.sendKeys("new task");
createTodo.sendKeys(Keys.ENTER);
assertThat(driver.findElement(
By.id("filters")).isDisplayed(), is(true));
int newToDos = driver.findElements(
By.cssSelector("ul#todo-list li")).size();
assertThat(newToDos, greaterThan(originalNumberOfTodos));
}
driver = new FirefoxDriver();
}
@After
public void stopDriver(){
driver.close();
driver.quit();
}
NoAbstractionTest.java
5. But this does use some
abstraction layers
LLooccaattoorr A Abbssttrraaccttioionns
WebElement Generic Element Abstraction
5
Example Test Without
Abstraction
@Before
public void startDriver(){
WebDriver Generic Browser Abstraction
@Test
public void canCreateAToDoWithNoAbstraction(){
Firefox Browser Abstraction
driver.get("http://todomvc.com/architecture-examples/backbone/");
int originalNumberOfTodos = driver.findElements(
By.cssSelector("ul#todo-list li")).size();
WebElement createTodo = driver.findElement(By.id("new-todo"));
createTodo.click();
createTodo.sendKeys("new task");
createTodo.sendKeys(Keys.ENTER);
assertThat(driver.findElement(
By.id("filters")).isDisplayed(), is(true));
int newToDos = driver.findElements(
Manipulation Abstractions
By.cssSelector("ul#todo-list li")).size();
assertThat(newToDos, greaterThan(originalNumberOfTodos));
}
driver = new FirefoxDriver();
}
@After
public void stopDriver(){
driver.close();
driver.quit();
}
NoAbstractionTest.java
6. 6
WebDriver provides abstractions
● Browser
● DOM
● Web Element
Tool vendors gain value from generic abstractions.
You gain value from 'domain' abstractions.
7. 7
Example Test With Abstraction
@Before
public void startDriver(){
@Test
public void canCreateAToDoWithAbstraction(){
TodoMVCUser user =
new TodoMVCUser(driver, new TodoMVCSite());
user.opensApplication().and().createNewToDo("new task");
ApplicationPageFunctional page =
new ApplicationPageFunctional(driver,
new TodoMVCSite());
assertThat(page.getCountOfTodoDoItems(), is(1));
assertThat(page.isFooterVisible(), is(true));
}
driver = new FirefoxDriver();
}
@After
public void stopDriver(){
driver.close();
driver.quit();
}
NoAbstractionTest.java
8. 8
Why Abstraction?
● Change implementations
● Single Responsibility – only changes when
necessary
● Makes automation readable and maintainable
● We can unit test some of our test code
● etc.
https://xp-dev.com/svn/AutomationAbstractions
9. 9
Some Abstraction Layer Categories
1) Data
– Generic Data Abstractions e.g. email, postcode
2) Physical
– Physical layout of your application e.g. pages,
components
– Navigation across pages
3) Domain
– Your application Entities domain e.g. user, account
4) Logical
– User actions, workflows
10. 10
Common Automation Abstractions
● Page Objects: pages, components, widgets
● Dom Element Abstractions: select, textbox, etc.
● Domain Objects: user, account, order
● Gherkin (Given/When/And/Then)
● Domain Specific Languages: code, keywords
● ...
https://xp-dev.com/svn/AutomationAbstractions
11. 11
Abstraction != Implementation
● Abstraction != Tool / Framework /
Implementation
● Gherkin != Cucumber
● Page Object != Page Factory / Slow Loadable
● DSL != Keyword Driven
If we want to get good at abstraction then we
need to model, split apart, make the relationships
clear, and be aware of our options.
12. 12
Page Objects
● The most obvious
automation abstraction
● What is it?
– A page? A Component?
● Do web applications still
have pages?
13. A Page Object that abstracts a Page
13
● Often has methods for
– Opening the page
– Accessing elements
– Doing stuff, and navigating as a side-effect
– Logical high level functionality e.g. login
– Low level physical functionality e.g.
typeUsername, clickLoginButton
Should a Page Object be responsible for all of
this?
14. 14
Page Object Design Decisions
● What methods does it have?
– Functional
● login(username, password),
● loginAs(user)
– Structural
● enterName(username), enterPassword(password),
clickLogin(), submitLoginForm(username, password)
● Does it expose elements or not?
– public WebElement loginButton;
– public WebElement getLoginButton();
– public clickLoginButton();
15. 15
Page Object Functionality
Approaches
● Expose WebElements Directly
– Leads to WebElement Abstractions
– public TextField userNameField;
● Hide WebElements behind physical functional
methods e.g. typeUserName("bob");
● Logical helper methods e.g.
loginAs(name,pass)
● Layers of Page Objects
– Physical
– Logical
16. 16
Navigation Design Decisions
● Does a Page Object return other pages?
public IssueListPage submit(){
driver.findElement(By.id(“submit”)).click();
return new IssueListPage(driver);
}
● Or Navigate implicitly after interactions
● Or have navigation objects
20. 20
POJO
● 'ApplicationPage.java'
– Used in 'SequentialCreationOfTest.java'
– Not much refactoring in the example
● Simple Class
● WebDriver passed to constructor
● Composition of any components
● e.g.
– com.seleniumsimplified.todomvc.page.pojo
– 'ApplicationPage.java'
● Not much refactoring in the example
23. 23
Functional Vs Structural Example
● One way of answering “what methods to put on
a page object”
– Is it functional / behavioural?
– Is it structural / Physical?
● Functional 'uses' Structural implementation
● Why?
– Sometimes it is just a naming difference
– Handling exceptions in functional but not structural
– Higher level methods in Functional
– Different concepts e.g. deleteLastItem
24. 24
Page Factory
● Annotate fields with @FindBy
● Instantiate in constructor using
PageFactory.initElements
– Can create your own page factory initialiser
● Avoids boilerplate accessor methods
● Fast to create Page Objects
● Might become harder to expand and maintain
26. 26
SlowLoadableComponent
● Some pages and components need
synchronisation to wait till they are ready
– One approach – SlowLoadableComponent adds
responsibility for waiting, to the page
● extend SlowLoadableComponent
● Standard interface for synchronisation on load
– get()
● If isLoaded then return this Else load
● While not loaded{ wait for 200 millseconds}
– Implement load and isLoaded
27. 27
Fluent Page Objects
todoMVC = new ApplicationPageFunctionalFluent(
driver, todoMVCSite);
todoMVC.get();
todoMVC.enterNewToDo("First Completed Item").
and().
toggleCompletionOfLastItem().
then().
enterNewToDo("Still to do this").
and().
enterNewToDo("Still to do this too").
then().
filterOnCompleted();
28. 28
Fluent Page Objects
● Methods return the page object or other objects
instead of void
– void clickDeleteButton();
– PageObject clickDeleteButton();
● Syntactic sugar methods:
– and(), then(), also()
● Can work well at high levels of abstraction and
when no navigation involved
● Train Wreck?
29. Navigation Options
29
● Direct in Test: page.get(); page.waitFor();
● Instantiate new pages based on test flow
– Navigation as side-effect, may have to bypass 'get'
– Loadable pages, non-loadable, support classes
● Page Object methods might return other Pages
– e.g. a method on the login page might be
● MyAccountPage clickLogin();
● We might use navigation objects
– direct, Jump.to(MyAccountPage.class)
– path based (current page → desired page)
● Navigate.to(MyAccountPage.class)
30. 30
Possible Domain Abstractions
● Logical Objects
– ToDo
– ToDoList
● Physical Objects
– LocallyStoredToDo
● Actors
– User
● Environment
– Site
– Implementation
31. 31
Page Objects & Domain Objects
● Instead of
– todoMVC.enterNewToDo(“New Item”)
● We could have have
– ToDoItem newItem = new ToDoItem(“New Item”);
– todoMVC.enterNewToDo(newItem);
● See code in DomainBasedTest
32. 32
Domain Objects That Span Logical
& Physical
e.g. User
● user.createNewToDo(“new item”)
● user.createNewToDo(newItem)
● See use in NoAbstractionTest
33. 33
Sometimes it is possible to over
think this stuff
● Don't let thinking about this slow you down
● Conduct experiments
● Refactor
● Rethink if
– you are maintaining too much
– your abstraction layer stops you doing stuff
– you are 'working around' your abstraction layers
35. 35
Element Abstraction Example
public interface Checkbox {
public boolean isChecked();
public Checkbox check();
public Checkbox uncheck();
public Checkbox toggle();
}
● Would you include 'toggle'?
https://xp-dev.com/svn/AutomationAbstractions
36. 36
Element Abstractions
● Existing support classes: Select,
● Possible: TextBox, Checkbox, TextBox, File etc.
● Can enforce Semantics
– Checkbox: isChecked, check(), uncheck(), toggle()
– TextBox: clear(), enterText()
– etc.
● Pass back from Page Objects into test?
37. Element Abstraction Pros and Cons
37
● May have to create a custom page factory
● Can help 'restrict' code i.e. check or uncheck,
rather than click, enforces 'semantics'
● If you create them...
– allow return WebElement
● so that I can go beyond the abstraction layer if I need to.
Not required if it is just a WebElement wrapper.
https://xp-dev.com/svn/AutomationAbstractions
38. 38
Component Abstractions
● Shared Components/Widgets on the page
● e.g.
– VisibleToDoEntry, VisibleToDoList
– Filters, Footer, Header, etc.
● Could have 'functional' representation for
repeated items e.g. login forms
● Could have 'structural' representation
● Likely use : page object composition
39. 39
Component Abstraction Example
TodoEntry todo = page.getToDoEntryAt(lastItemPosition);
todo.markCompleted();
Instead of
page.markTodoCompleted(lastItemPosition);
40. 40
Gherkin as an abstraction layer
Feature: We can create and edit To Do lists in ToDoMvc
We want to amend todos in ToDoMVC because that is
the set of exercises on the abstraction tutorial
Scenario: Create a ToDo Item
Given a user opens a blank ToDoMVC page
When the user creates a todo "new task"
Then they see 1 todo item on the page
● Implement steps using highest appropriate
abstraction layer
● CucumberJVM as 'DSL implementor'
● 'Expressibility' vs 'Step Re-use'
● See todomvc.feature and ToDoMvcSteps
41. 41
My modeling biases
● Driver
– Inject so instantiate any page or component as
required/desired at any time
● Explicit Synchronisation
– To make sure that the desired object is available
and ready for use (as defined by synchronisation)
● Navigation
– Implicit (via taking action e.g. click)
– Explicit Navigation Object, not in page object
● Open/jump (via driver.get)
● To (state model from current, to desired)
42. 42
My modeling biases
● Page Objects
– Physical
● abstract the 'real world'
– Components
● For common features on the page
– Logical
● abstract the functionality
● Sometimes these are entity methods not page objects
– e.g. user.registers().and().logsin()
● I tend not to....
– abstract WebElements
43. 43
My modeling biases
● I tend not to....
– abstract WebElements
– Use inheritence to create a model of the app
● e.g. MyAppPage extends GenericAppPage
– Use 3rd party abstractions on top of WebDriver
44. 44
Are there rights and wrongs?
● Right / Wrong?
● Decisions?
● Project/Team/Organisation Standards?
Identify your own biases -
Experiment
Recognise your decisions
45. 45
Decisions
● The 'limits' and overlap of Abstraction Layers
● Build it now, or 'refactor to' later
● How much change is anticipated?
– To which layer? GUI, Business domain, Workflow?
● Who is working with the automation code?
– Skill levels? Support needed?
● How/When with the automation execute?
46. 46
Other Useful Links
● Jeff “Cheezy” Morgan – page-object ruby gem,
data_magic gem and stareast code
– https://github.com/cheezy?tab=repositories
● Marcus Merrell
– Self-Generating Test Artifacts for Selenium/WebDriver
– https://www.youtube.com/watch?v=mSCFsUOgPpw
● Anand Ramdeo
– One Step at a Time
– https://www.youtube.com/watch?v=dFPgzH_XP1I
https://xp-dev.com/svn/AutomationAbstractions
47. 47
Homework
● Using the code at
https://xp-dev.com/svn/AutomationAbstractions/
– Compare the different implementations under 'main'
● com.seleniumsimplified.todomvc.page
– Investigate how the Page Objects delegate to each
other, and the Domain Objects use Page Objects
– Examine the 'test' usage of the Page Objects and
Domain Objects
– Examine the different navigation approaches
48. 48
Blogs and Websites
● CompendiumDev.co.uk
● SeleniumSimplified.com
● EvilTester.com
● JavaForTesters.com
● Twitter: @eviltester
Online Training Courses
● Technical Web Testing 101
Unow.be/at/techwebtest101
● Intro to Selenium
Unow.be/at/startwebdriver
● Selenium 2 WebDriver API
Unow.be/at/webdriverapi
Videos
youtube.com/user/EviltesterVideos
Books
Selenium Simplified
Unow.be/rc/selsimp
Java For Testers
leanpub.com/javaForTesters
Alan Richardson
uk.linkedin.com/in/eviltester
Independent Test Consultant
& Custom Training
Contact Alan
http://compendiumdev.co.uk/contact