SlideShare a Scribd company logo
1 of 21
Download to read offline
How to develop automated tests
Géry Debongnie
Content
1. Automated tests
2. website.tour.js
3. Case study
4. Testing in practice
Automated Tests
Tour = Test or Tutorial
A Short Demo
Tutorials and Tests
tutorialstutorials : sequence of steps. Each step wait for the user
to do something, before moving to the next step.
teststests : same, but the js code simulates an user
·
·
Use Cases
guide your users with tutorials
test any kind of business flow (customer buying an event
ticket, ...)
test any odoo addon (application in backend) (not ready
yet)
·
·
·
website.tour.js
Architecture
manage all tours (tests/tutorials)
standalone (doesn't use odoo framework)
save its state in local storage (survive a refresh/page
change)
simulates all DOM events
automatically adds tutorials in the help menu
tests will only be successful if all steps are completed
·
·
·
·
·
·
Simple example (test)
website..Tour..register({({
id:: 'shop_customize',,
name:: "Customize the page and search a product",,
path:: '/shop',,
mode:: 'test',,
steps:: [[
{{
title:: "open customize menu",,
element:: '#customize-menu-button',,
},},
{{
title:: "click on 'Product Attribute's Filters'",,
element:: "#customize-menu a:contains(Product Attribute's Filters)",,
},},
{{
title:: "select product attribute memory 16 Go",,
element:: 'form.js_attributes label:contains(16 Go) input:not(:checked)',,
},},
......
]]
});});
API
A tour is defined by some simple attributes:
id
name
path
mode
id:: 'shop_customize',,
name:: "Customize the page and search a product",,
path:: '/shop',,
mode:: 'test',,
and a more complex one: steps.
·
·
·
·
Steps definition
A step is defined with a selection of attributes:
title
element
waitFor
waitNot
some others
{{
title:: "open customize menu",,
element:: '#customize-menu-button',,
},},
{{
title:: "click on 'Product Attribute's Filters'",,
element:: "#customize-menu a:contains(Product Attribute's Filters)",,
},},
·
·
·
·
·
Steps definition (2)
{{
title:: "select product attribute memory 16 Go",,
element:: 'form.js_attributes label:contains(16 Go)
input:not(:checked)',,
},},
{{
title:: "check the selection",,
waitFor:: 'form.js_attributes label:contains(16 Go) input:checked',,
},},
{{
title:: "select ipod",,
waitNot:: '.oe_website_sale .oe_product_cart:eq(2)',,
element:: '.oe_product_cart a:contains("iPod")',,
},},
{{
title:: "finish",,
waitFor:: 'label:contains(32 Go) input',,
}}
Tests: automated actions!
Actions are simulated on the 'element':
mouseenter, mousedown, mouse click, mouse up, mouse
leave
if attribute sampleText: idem, then keydown,
if input/select, value is set to sampleText
otherwise, html is set to sampleText
if snippet: simulates drag and drop with mousedown,
mousemove,mouseup
{{
title:: "set one iPod",,
waitNot:: '#cart_products tr:contains("Apple In-Ear Headphones")',,
element:: '#cart_products input.js_quantity',,
sampleText:: '1',,
},},
·
·
·
·
·
Case study
a more complex example (tutorial)
Create a product
website..Tour..register({({
id:: 'shop',,
name:: _t(("Create a product"),),
steps:: [[
{{
title:: _t(("Welcome to your shop"),),
content:: _t(("You successfully installed the e-commerce. This guide will help you to create your product a
popover:: {{ next:: _t(("Start Tutorial"),), end:: _t(("Skip It")) },},
},},
{{
element:: '#content-menu-button',,
placement:: 'left',,
title:: _t(("Create your first product"),),
content:: _t(("Click here to add a new product."),),
popover:: {{ fixed:: truetrue },},
},},
......
Create a product (2)
{{
element:: 'a[data-action=new_product]',,
placement:: 'left',,
title:: _t(("Create a new product"),),
content:: _t(("Select 'New Product' to create it and manage its properties to boost your sales."),),
popover:: {{ fixed:: truetrue },},
},}, {{
element:: '.modal #editor_new_product input[type=text]',,
sampleText:: 'New Product',,
placement:: 'right',,
title:: _t(("Choose name"),),
content:: _t(("Enter a name for your new product then click 'Continue'."),),
},}, {{
waitNot:: '.modal input[type=text]:not([value!=""])',,
element:: '.modal button.btn-primary',,
placement:: 'right',,
title:: _t(("Create Product"),),
content:: _t(("Click <em>Continue</em> to create the product."),),
},},
It's really easy!
Just follow the examples...
website.tour.events.js
website.tour.blog.js
...
·
·
·
Testing in practice
Testing with the runbot
Example: test_sale_process.py
inject == [[
(("openerp.website.Tour",, '.../static/src/js/website.tour.js')),)),
(("openerp.website.Tour.ShopTest",, '.../src/js/website.tour.sale.js"))]
classclass TestUi((openerp..tests..HttpCase):):
defdef test_01_admin_shop_tour((self):):
self..phantom_js((
"/",,
"openerp.website.Tour.run('shop', 'test')",,
"openerp.website.Tour.tours.shop",, login=="admin"))
defdef test_02_admin_checkout((self):):
self..phantom_js((
"/",,
"openerp.website.Tour.run('shop_customize', 'test')",,
"openerp.website.Tour.tours.shop_customize",,
login=="admin",,
inject==inject))
Coming Soon (really)
testing in backend
file upload
·
·
Thank you

More Related Content

What's hot

Document Object Model
Document Object ModelDocument Object Model
Document Object Model
chomas kandar
 

What's hot (20)

Chapter 1 introduction to sql server
Chapter 1 introduction to sql serverChapter 1 introduction to sql server
Chapter 1 introduction to sql server
 
django
djangodjango
django
 
Data and time
Data and timeData and time
Data and time
 
jQuery
jQueryjQuery
jQuery
 
Introduction to the DOM
Introduction to the DOMIntroduction to the DOM
Introduction to the DOM
 
Deploying & Scaling your Odoo Server
Deploying & Scaling your Odoo ServerDeploying & Scaling your Odoo Server
Deploying & Scaling your Odoo Server
 
Php array
Php arrayPhp array
Php array
 
Ajax presentation
Ajax presentationAjax presentation
Ajax presentation
 
Angular tutorial
Angular tutorialAngular tutorial
Angular tutorial
 
Html forms
Html formsHtml forms
Html forms
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction Django
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
jQuery
jQueryjQuery
jQuery
 
Security: Odoo Code Hardening
Security: Odoo Code HardeningSecurity: Odoo Code Hardening
Security: Odoo Code Hardening
 
Document Object Model
Document Object ModelDocument Object Model
Document Object Model
 
An in Depth Journey into Odoo's ORM
An in Depth Journey into Odoo's ORMAn in Depth Journey into Odoo's ORM
An in Depth Journey into Odoo's ORM
 
Separation of concerns - DPC12
Separation of concerns - DPC12Separation of concerns - DPC12
Separation of concerns - DPC12
 
Set Default Values to Fields in Odoo 15
Set Default Values to Fields in Odoo 15Set Default Values to Fields in Odoo 15
Set Default Values to Fields in Odoo 15
 
How to Use JSON in MySQL Wrong
How to Use JSON in MySQL WrongHow to Use JSON in MySQL Wrong
How to Use JSON in MySQL Wrong
 
Vue js for beginner
Vue js for beginner Vue js for beginner
Vue js for beginner
 

Similar to How to develop automated tests

Compatibility Detector Tool of Chrome extensions
Compatibility Detector Tool of Chrome extensionsCompatibility Detector Tool of Chrome extensions
Compatibility Detector Tool of Chrome extensions
Kai Cui
 

Similar to How to develop automated tests (20)

How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
Puppeteer - A web scraping & UI Testing Tool
Puppeteer - A web scraping & UI Testing ToolPuppeteer - A web scraping & UI Testing Tool
Puppeteer - A web scraping & UI Testing Tool
 
Secrets of JavaScript Libraries
Secrets of JavaScript LibrariesSecrets of JavaScript Libraries
Secrets of JavaScript Libraries
 
E2E testing con nightwatch.js - Drupalcamp Spain 2018
E2E testing con nightwatch.js  - Drupalcamp Spain 2018E2E testing con nightwatch.js  - Drupalcamp Spain 2018
E2E testing con nightwatch.js - Drupalcamp Spain 2018
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected Journey
 
Compatibility Detector Tool of Chrome extensions
Compatibility Detector Tool of Chrome extensionsCompatibility Detector Tool of Chrome extensions
Compatibility Detector Tool of Chrome extensions
 
Angular performance slides
Angular performance slidesAngular performance slides
Angular performance slides
 
Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и Django
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
 
Code igniter unittest-part1
Code igniter unittest-part1Code igniter unittest-part1
Code igniter unittest-part1
 
YUI 3
YUI 3YUI 3
YUI 3
 
Spin Up Desktop Apps with Electron.js
Spin Up Desktop Apps with Electron.jsSpin Up Desktop Apps with Electron.js
Spin Up Desktop Apps with Electron.js
 
Day 5
Day 5Day 5
Day 5
 
jQuery Bay Area Conference 2010
jQuery Bay Area Conference 2010jQuery Bay Area Conference 2010
jQuery Bay Area Conference 2010
 
Non stop random2b
Non stop random2bNon stop random2b
Non stop random2b
 
Java awt
Java awtJava awt
Java awt
 
Clean Javascript
Clean JavascriptClean Javascript
Clean Javascript
 
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
Educate 2017: Customizing Assessments: Why extending the APIs is easier than ...
 
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
 

More from Odoo

More from Odoo (20)

Timesheet Workshop: The Timesheet App People Love!
Timesheet Workshop: The Timesheet App People Love!Timesheet Workshop: The Timesheet App People Love!
Timesheet Workshop: The Timesheet App People Love!
 
Odoo 3D Product View with Google Model-Viewer
Odoo 3D Product View with Google Model-ViewerOdoo 3D Product View with Google Model-Viewer
Odoo 3D Product View with Google Model-Viewer
 
Keynote - Vision & Strategy
Keynote - Vision & StrategyKeynote - Vision & Strategy
Keynote - Vision & Strategy
 
Opening Keynote - Unveilling Odoo 14
Opening Keynote - Unveilling Odoo 14Opening Keynote - Unveilling Odoo 14
Opening Keynote - Unveilling Odoo 14
 
Extending Odoo with a Comprehensive Budgeting and Forecasting Capability
Extending Odoo with a Comprehensive Budgeting and Forecasting CapabilityExtending Odoo with a Comprehensive Budgeting and Forecasting Capability
Extending Odoo with a Comprehensive Budgeting and Forecasting Capability
 
Managing Multi-channel Selling with Odoo
Managing Multi-channel Selling with OdooManaging Multi-channel Selling with Odoo
Managing Multi-channel Selling with Odoo
 
Product Configurator: Advanced Use Case
Product Configurator: Advanced Use CaseProduct Configurator: Advanced Use Case
Product Configurator: Advanced Use Case
 
Accounting Automation: How Much Money We Saved and How?
Accounting Automation: How Much Money We Saved and How?Accounting Automation: How Much Money We Saved and How?
Accounting Automation: How Much Money We Saved and How?
 
Rock Your Logistics with Advanced Operations
Rock Your Logistics with Advanced OperationsRock Your Logistics with Advanced Operations
Rock Your Logistics with Advanced Operations
 
Transition from a cost to a flow-centric organization
Transition from a cost to a flow-centric organizationTransition from a cost to a flow-centric organization
Transition from a cost to a flow-centric organization
 
Synchronization: The Supply Chain Response to Overcome the Crisis
Synchronization: The Supply Chain Response to Overcome the CrisisSynchronization: The Supply Chain Response to Overcome the Crisis
Synchronization: The Supply Chain Response to Overcome the Crisis
 
Running a University with Odoo
Running a University with OdooRunning a University with Odoo
Running a University with Odoo
 
Down Payments on Purchase Orders in Odoo
Down Payments on Purchase Orders in OdooDown Payments on Purchase Orders in Odoo
Down Payments on Purchase Orders in Odoo
 
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach foodOdoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
 
Migration from Salesforce to Odoo
Migration from Salesforce to OdooMigration from Salesforce to Odoo
Migration from Salesforce to Odoo
 
Preventing User Mistakes by Using Machine Learning
Preventing User Mistakes by Using Machine LearningPreventing User Mistakes by Using Machine Learning
Preventing User Mistakes by Using Machine Learning
 
Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification
 
Instant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelInstant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping Label
 
How Odoo helped an Organization Grow 3 Fold
How Odoo helped an Organization Grow 3 FoldHow Odoo helped an Organization Grow 3 Fold
How Odoo helped an Organization Grow 3 Fold
 
From Shopify to Odoo
From Shopify to OdooFrom Shopify to Odoo
From Shopify to Odoo
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

How to develop automated tests

  • 1. How to develop automated tests Géry Debongnie
  • 2. Content 1. Automated tests 2. website.tour.js 3. Case study 4. Testing in practice
  • 3. Automated Tests Tour = Test or Tutorial
  • 5. Tutorials and Tests tutorialstutorials : sequence of steps. Each step wait for the user to do something, before moving to the next step. teststests : same, but the js code simulates an user · ·
  • 6. Use Cases guide your users with tutorials test any kind of business flow (customer buying an event ticket, ...) test any odoo addon (application in backend) (not ready yet) · · ·
  • 8. Architecture manage all tours (tests/tutorials) standalone (doesn't use odoo framework) save its state in local storage (survive a refresh/page change) simulates all DOM events automatically adds tutorials in the help menu tests will only be successful if all steps are completed · · · · · ·
  • 9. Simple example (test) website..Tour..register({({ id:: 'shop_customize',, name:: "Customize the page and search a product",, path:: '/shop',, mode:: 'test',, steps:: [[ {{ title:: "open customize menu",, element:: '#customize-menu-button',, },}, {{ title:: "click on 'Product Attribute's Filters'",, element:: "#customize-menu a:contains(Product Attribute's Filters)",, },}, {{ title:: "select product attribute memory 16 Go",, element:: 'form.js_attributes label:contains(16 Go) input:not(:checked)',, },}, ...... ]] });});
  • 10. API A tour is defined by some simple attributes: id name path mode id:: 'shop_customize',, name:: "Customize the page and search a product",, path:: '/shop',, mode:: 'test',, and a more complex one: steps. · · · ·
  • 11. Steps definition A step is defined with a selection of attributes: title element waitFor waitNot some others {{ title:: "open customize menu",, element:: '#customize-menu-button',, },}, {{ title:: "click on 'Product Attribute's Filters'",, element:: "#customize-menu a:contains(Product Attribute's Filters)",, },}, · · · · ·
  • 12. Steps definition (2) {{ title:: "select product attribute memory 16 Go",, element:: 'form.js_attributes label:contains(16 Go) input:not(:checked)',, },}, {{ title:: "check the selection",, waitFor:: 'form.js_attributes label:contains(16 Go) input:checked',, },}, {{ title:: "select ipod",, waitNot:: '.oe_website_sale .oe_product_cart:eq(2)',, element:: '.oe_product_cart a:contains("iPod")',, },}, {{ title:: "finish",, waitFor:: 'label:contains(32 Go) input',, }}
  • 13. Tests: automated actions! Actions are simulated on the 'element': mouseenter, mousedown, mouse click, mouse up, mouse leave if attribute sampleText: idem, then keydown, if input/select, value is set to sampleText otherwise, html is set to sampleText if snippet: simulates drag and drop with mousedown, mousemove,mouseup {{ title:: "set one iPod",, waitNot:: '#cart_products tr:contains("Apple In-Ear Headphones")',, element:: '#cart_products input.js_quantity',, sampleText:: '1',, },}, · · · · ·
  • 14. Case study a more complex example (tutorial)
  • 15. Create a product website..Tour..register({({ id:: 'shop',, name:: _t(("Create a product"),), steps:: [[ {{ title:: _t(("Welcome to your shop"),), content:: _t(("You successfully installed the e-commerce. This guide will help you to create your product a popover:: {{ next:: _t(("Start Tutorial"),), end:: _t(("Skip It")) },}, },}, {{ element:: '#content-menu-button',, placement:: 'left',, title:: _t(("Create your first product"),), content:: _t(("Click here to add a new product."),), popover:: {{ fixed:: truetrue },}, },}, ......
  • 16. Create a product (2) {{ element:: 'a[data-action=new_product]',, placement:: 'left',, title:: _t(("Create a new product"),), content:: _t(("Select 'New Product' to create it and manage its properties to boost your sales."),), popover:: {{ fixed:: truetrue },}, },}, {{ element:: '.modal #editor_new_product input[type=text]',, sampleText:: 'New Product',, placement:: 'right',, title:: _t(("Choose name"),), content:: _t(("Enter a name for your new product then click 'Continue'."),), },}, {{ waitNot:: '.modal input[type=text]:not([value!=""])',, element:: '.modal button.btn-primary',, placement:: 'right',, title:: _t(("Create Product"),), content:: _t(("Click <em>Continue</em> to create the product."),), },},
  • 17. It's really easy! Just follow the examples... website.tour.events.js website.tour.blog.js ... · · ·
  • 19. Testing with the runbot Example: test_sale_process.py inject == [[ (("openerp.website.Tour",, '.../static/src/js/website.tour.js')),)), (("openerp.website.Tour.ShopTest",, '.../src/js/website.tour.sale.js"))] classclass TestUi((openerp..tests..HttpCase):): defdef test_01_admin_shop_tour((self):): self..phantom_js(( "/",, "openerp.website.Tour.run('shop', 'test')",, "openerp.website.Tour.tours.shop",, login=="admin")) defdef test_02_admin_checkout((self):): self..phantom_js(( "/",, "openerp.website.Tour.run('shop_customize', 'test')",, "openerp.website.Tour.tours.shop_customize",, login=="admin",, inject==inject))
  • 20. Coming Soon (really) testing in backend file upload · ·