Browse Source

Updated docs with SeleniumGridV4WithBaangt.rst

bernhardbuhl 4 years ago
parent
commit
20f83b0c25
90 changed files with 3049 additions and 252 deletions
  1. BIN
      docs/_build/doctrees/BrowserDrivers.doctree
  2. BIN
      docs/_build/doctrees/DataFile.doctree
  3. BIN
      docs/_build/doctrees/Developer.doctree
  4. BIN
      docs/_build/doctrees/OverviewUsage.doctree
  5. BIN
      docs/_build/doctrees/ParametersConfigFile.doctree
  6. BIN
      docs/_build/doctrees/PlannedFeatures.doctree
  7. BIN
      docs/_build/doctrees/SimpleAPI.doctree
  8. BIN
      docs/_build/doctrees/Structure.doctree
  9. BIN
      docs/_build/doctrees/articles/AgileWorkflowIntegration.doctree
  10. BIN
      docs/_build/doctrees/articles/Articles.doctree
  11. BIN
      docs/_build/doctrees/articles/AsynchronousAndCanonTests.doctree
  12. BIN
      docs/_build/doctrees/articles/BugSoup.doctree
  13. BIN
      docs/_build/doctrees/articles/SeleniumGridV4WithBaangt.doctree
  14. BIN
      docs/_build/doctrees/articles/StopTesting.doctree
  15. BIN
      docs/_build/doctrees/changelog.doctree
  16. BIN
      docs/_build/doctrees/docs/baangt-Plugin.doctree
  17. BIN
      docs/_build/doctrees/docs/baangt.TestCaseSequence.doctree
  18. BIN
      docs/_build/doctrees/docs/baangt.base.doctree
  19. BIN
      docs/_build/doctrees/environment.pickle
  20. BIN
      docs/_build/doctrees/index.doctree
  21. BIN
      docs/_build/doctrees/simpleExample.doctree
  22. 1 1
      docs/_build/html/.buildinfo
  23. 245 0
      docs/_build/html/BrowserDrivers.html
  24. 5 4
      docs/_build/html/DataFile.html
  25. 11 1
      docs/_build/html/Developer.html
  26. 2 1
      docs/_build/html/HistoryAndReasons.html
  27. 2 1
      docs/_build/html/Installation.html
  28. 33 30
      docs/_build/html/OverviewUsage.html
  29. 13 9
      docs/_build/html/ParametersConfigFile.html
  30. 17 11
      docs/_build/html/PlannedFeatures.html
  31. 32 1
      docs/_build/html/SimpleAPI.html
  32. 5 4
      docs/_build/html/Structure.html
  33. 2 1
      docs/_build/html/TestTypes.html
  34. BIN
      docs/_build/html/_images/vncDesktopSeleniumGridDocker.png
  35. 28 0
      docs/_build/html/_sources/BrowserDrivers.rst.txt
  36. 3 3
      docs/_build/html/_sources/DataFile.rst.txt
  37. 11 1
      docs/_build/html/_sources/Developer.rst.txt
  38. 32 27
      docs/_build/html/_sources/OverviewUsage.rst.txt
  39. 10 8
      docs/_build/html/_sources/ParametersConfigFile.rst.txt
  40. 13 8
      docs/_build/html/_sources/PlannedFeatures.rst.txt
  41. 30 0
      docs/_build/html/_sources/SimpleAPI.rst.txt
  42. 3 3
      docs/_build/html/_sources/Structure.rst.txt
  43. 1 1
      docs/_build/html/_sources/articles/AgileWorkflowIntegration.rst.txt
  44. 4 1
      docs/_build/html/_sources/articles/Articles.rst.txt
  45. 132 0
      docs/_build/html/_sources/articles/AsynchronousAndCanonTests.rst.txt
  46. 161 0
      docs/_build/html/_sources/articles/BugSoup.rst.txt
  47. 23 0
      docs/_build/html/_sources/articles/SeleniumGridV4WithBaangt.rst.txt
  48. 2 2
      docs/_build/html/_sources/articles/StopTesting.rst.txt
  49. 24 0
      docs/_build/html/_sources/changelog.rst.txt
  50. 100 0
      docs/_build/html/_sources/docs/baangt-Plugin.rst.txt
  51. 2 2
      docs/_build/html/_sources/docs/baangt.base.rst.txt
  52. 2 1
      docs/_build/html/_sources/index.rst.txt
  53. 63 29
      docs/_build/html/_sources/simpleExample.rst.txt
  54. 31 5
      docs/_build/html/articles/AgileWorkflowIntegration.html
  55. 29 5
      docs/_build/html/articles/Articles.html
  56. 741 0
      docs/_build/html/articles/AsynchronousAndCanonTests.html
  57. 5 1
      docs/_build/html/articles/BaangtIndustries.html
  58. 415 0
      docs/_build/html/articles/BugSoup.html
  59. 5 1
      docs/_build/html/articles/DataDoctor.html
  60. 5 1
      docs/_build/html/articles/ProductionSucks.html
  61. 221 0
      docs/_build/html/articles/SeleniumGridV4WithBaangt.html
  62. 11 4
      docs/_build/html/articles/StopTesting.html
  63. 40 6
      docs/_build/html/changelog.html
  64. 2 1
      docs/_build/html/contributors.html
  65. 288 0
      docs/_build/html/docs/baangt-Plugin.html
  66. 2 1
      docs/_build/html/docs/baangt.TestCase.html
  67. 4 3
      docs/_build/html/docs/baangt.TestCaseSequence.html
  68. 2 1
      docs/_build/html/docs/baangt.TestSteps.DropsApp.html
  69. 2 1
      docs/_build/html/docs/baangt.TestSteps.html
  70. 52 3
      docs/_build/html/docs/baangt.base.html
  71. 2 1
      docs/_build/html/docs/baangt.html
  72. 17 8
      docs/_build/html/docs/baangt.katalonImporter.html
  73. 2 1
      docs/_build/html/docs/baangt.ui.html
  74. 2 1
      docs/_build/html/docs/baangtIA.html
  75. 2 1
      docs/_build/html/docs/modules.html
  76. 2 1
      docs/_build/html/docs/setup.html
  77. 31 10
      docs/_build/html/genindex.html
  78. 17 6
      docs/_build/html/index.html
  79. BIN
      docs/_build/html/objects.inv
  80. 8 2
      docs/_build/html/py-modindex.html
  81. 3 2
      docs/_build/html/search.html
  82. 1 1
      docs/_build/html/searchindex.js
  83. 61 30
      docs/_build/html/simpleExample.html
  84. 5 0
      docs/_build/linkcheck/output.txt
  85. 2 1
      docs/articles/Articles.rst
  86. 23 0
      docs/articles/SeleniumGridV4WithBaangt.rst
  87. 1 1
      docs/conf.py
  88. 2 2
      docs/docs/baangt.base.rst
  89. 1 1
      docs/index.rst
  90. BIN
      docs/vncDesktopSeleniumGridDocker.png

BIN
docs/_build/doctrees/BrowserDrivers.doctree


BIN
docs/_build/doctrees/DataFile.doctree


BIN
docs/_build/doctrees/Developer.doctree


BIN
docs/_build/doctrees/OverviewUsage.doctree


BIN
docs/_build/doctrees/ParametersConfigFile.doctree


BIN
docs/_build/doctrees/PlannedFeatures.doctree


BIN
docs/_build/doctrees/SimpleAPI.doctree


BIN
docs/_build/doctrees/Structure.doctree


BIN
docs/_build/doctrees/articles/AgileWorkflowIntegration.doctree


BIN
docs/_build/doctrees/articles/Articles.doctree


BIN
docs/_build/doctrees/articles/AsynchronousAndCanonTests.doctree


BIN
docs/_build/doctrees/articles/BugSoup.doctree


BIN
docs/_build/doctrees/articles/SeleniumGridV4WithBaangt.doctree


BIN
docs/_build/doctrees/articles/StopTesting.doctree


BIN
docs/_build/doctrees/changelog.doctree


BIN
docs/_build/doctrees/docs/baangt-Plugin.doctree


BIN
docs/_build/doctrees/docs/baangt.TestCaseSequence.doctree


BIN
docs/_build/doctrees/docs/baangt.base.doctree


BIN
docs/_build/doctrees/environment.pickle


BIN
docs/_build/doctrees/index.doctree


BIN
docs/_build/doctrees/simpleExample.doctree


+ 1 - 1
docs/_build/html/.buildinfo

@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 98e25ace4729fecfc9213be5ad9d34a1
+config: 837d53094322b956a4c0d61a5bac9771
 tags: 645f666f9bcd5a90fca523b33c5a78b7

+ 245 - 0
docs/_build/html/BrowserDrivers.html

@@ -0,0 +1,245 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Handling of Browser Drivers &mdash; baangt 2020.3.0.rc4 documentation</title>
+  
+
+  
+  
+  
+  
+
+  
+  <script type="text/javascript" src="_static/js/modernizr.min.js"></script>
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script type="text/javascript" src="_static/jquery.js"></script>
+        <script type="text/javascript" src="_static/underscore.js"></script>
+        <script type="text/javascript" src="_static/doctools.js"></script>
+        <script type="text/javascript" src="_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+
+    
+
+  
+  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Not Exactly Documentation" href="articles/Articles.html" />
+    <link rel="prev" title="Future Features" href="PlannedFeatures.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+
+          
+            <a href="index.html" class="icon icon-home"> baangt
+          
+
+          
+          </a>
+
+          
+            
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="Installation.html">   Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="OverviewUsage.html">   Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="simpleExample.html">   First Steps</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Structure.html">   Structure</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ParametersConfigFile.html">   Parameters</a></li>
+<li class="toctree-l1"><a class="reference internal" href="DataFile.html">   Data file</a></li>
+<li class="toctree-l1"><a class="reference internal" href="SimpleAPI.html">   First API Test</a></li>
+<li class="toctree-l1"><a class="reference internal" href="TestTypes.html">   Types of Tests</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Developer.html">   For Developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="HistoryAndReasons.html">   History</a></li>
+<li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
+<li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">   Browser Drivers</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#new-release-of-browser-drivers">New release of browser drivers</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#alternative-version">Alternative version:</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#older-releases-of-browser-drivers">Older releases of browser drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">baangt</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="index.html">Docs</a> &raquo;</li>
+        
+      <li>Handling of Browser Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="_sources/BrowserDrivers.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="handling-of-browser-drivers">
+<h1>Handling of Browser Drivers<a class="headerlink" href="#handling-of-browser-drivers" title="Permalink to this headline">¶</a></h1>
+<p>When you install <code class="docutils literal notranslate"><span class="pre">baangt</span></code> the latest version of Chromedriver and Geckodriver (for Firefox) are included. Depending on your
+situation you might need different drivers.</p>
+<div class="section" id="new-release-of-browser-drivers">
+<h2>New release of browser drivers<a class="headerlink" href="#new-release-of-browser-drivers" title="Permalink to this headline">¶</a></h2>
+<p>As you work with <code class="docutils literal notranslate"><span class="pre">baangt</span></code> for a longer time your browsers might be updated. If you receive an error telling about wrong
+version of browser driver, you can simply delete the existing driver in <code class="docutils literal notranslate"><span class="pre">baangt/BrowserDrivers/</span></code> and on the next start
+<code class="docutils literal notranslate"><span class="pre">baangt</span></code> will automatically download the latest version.</p>
+<div class="section" id="alternative-version">
+<h3>Alternative version:<a class="headerlink" href="#alternative-version" title="Permalink to this headline">¶</a></h3>
+<p>If you start baangt with the following syntax from the command line, it will download the latest drivers (Chrome and
+Firefox) automatically:</p>
+<p><code class="docutils literal notranslate"><span class="pre">`python3</span> <span class="pre">baangt.py</span> <span class="pre">--reloadDrivers=True`</span></code></p>
+<p>It will overwrite existing versions.</p>
+</div>
+</div>
+<div class="section" id="older-releases-of-browser-drivers">
+<h2>Older releases of browser drivers<a class="headerlink" href="#older-releases-of-browser-drivers" title="Permalink to this headline">¶</a></h2>
+<p>Please download the release that you need from chrome and/or Firefox and replace the existing files in <code class="docutils literal notranslate"><span class="pre">baangt/BrowserDrivers/</span></code>
+which the freshly downloaded, older version. After the next start it should work fine.</p>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="articles/Articles.html" class="btn btn-neutral float-right" title="Not Exactly Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="PlannedFeatures.html" class="btn btn-neutral float-left" title="Future Features" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2020, Bernhard Buhl
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>

+ 5 - 4
docs/_build/html/DataFile.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Special functions in datafiles &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Special functions in datafiles &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -95,6 +95,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -165,8 +166,8 @@
 <h1>Special functions in datafiles<a class="headerlink" href="#special-functions-in-datafiles" title="Permalink to this headline">¶</a></h1>
 <p>Datafiles (or in Excel Simple format simply a tab “data”) generally hold the data for one or more testcases.</p>
 <p>The first line of the datafile holds the header line. Each cell in the header must have a unique value and acts as variablename,
-that you can use for either checking, for IF-Statements or as values to write into fields or comapare with assertions.</p>
-<p>Additionally there are some reserved names, that deliver the following functionality:</p>
+which you can use for checking, for IF-Statements or as values to write into fields or compare with assertions.</p>
+<p>Additionally there are some reserved names that deliver the following functionality:</p>
 <table class="colwidths-given docutils align-default" id="id1">
 <caption><span class="caption-text">Field names in Datafiles and their function</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption>
 <colgroup>
@@ -179,7 +180,7 @@ that you can use for either checking, for IF-Statements or as values to write in
 </tr>
 </thead>
 <tbody>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">TC</span> <span class="pre">Expected</span> <span class="pre">Error</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">TC</span> <span class="pre">Expected</span> <span class="pre">Error</span></code> (!sic)</p></td>
 <td><p>When set to value <code class="docutils literal notranslate"><span class="pre">X</span></code>, the Test case is supposed to fail. If it fails (as expected) the status of the testcase is set to OK.</p></td>
 </tr>
 <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">JSON</span></code></p></td>

+ 11 - 1
docs/_build/html/Developer.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Developer guidelines for custom enhancements &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Developer guidelines for custom enhancements &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -94,12 +94,14 @@
 <li class="toctree-l2"><a class="reference internal" href="#subclassing">Subclassing</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#debugging">Debugging</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#plugins">Plugins</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#network-trace">Network trace</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="HistoryAndReasons.html">   History</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -213,6 +215,14 @@ breakpoints and expect the program to halt on the breakpoint. You’ve two chanc
 <p>Please make yourself familiar with <a class="reference external" href="https://pluggy.readthedocs.io/en/latest/">https://pluggy.readthedocs.io/en/latest/</a> in order to implement Plugins.
 If you’re stuck let me know.</p>
 </div>
+<div class="section" id="network-trace">
+<h2>Network trace<a class="headerlink" href="#network-trace" title="Permalink to this headline">¶</a></h2>
+<p>Sometimes it’s useful (especially for frontend debugging and in performance measurments) to have more detailed log about
+the calls that the browser exchanges with the backend. If you need this, use <code class="docutils literal notranslate"><span class="pre">TC.NetworkInfo</span></code> with value = <code class="docutils literal notranslate"><span class="pre">True</span></code>.
+In the output file you’ll see a new tab “Network” that shows all calls, headers, payload and timing information for each
+call.</p>
+<p>Use with care, as the file can get pretty big.</p>
+</div>
 </div>
 
 

+ 2 - 1
docs/_build/html/HistoryAndReasons.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Why baangt and why is it open source? &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Why baangt and why is it open source? &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -99,6 +99,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 2 - 1
docs/_build/html/Installation.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Installation &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Installation &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -100,6 +100,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 33 - 30
docs/_build/html/OverviewUsage.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>What is baangt &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>What is baangt &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -85,7 +85,7 @@
 <li class="toctree-l1"><a class="reference internal" href="Installation.html">   Installation</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">   Overview</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="#the-fastest-simplest-way-to-record-test-cases">The fastest, simplest way to record test cases</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#still-simple-and-more-powerful-ways">Still simple and more powerful ways:</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#more-powerful-and-still-ways">More powerful and still ways:</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#hey-why-not-do-everything-in-excel">Hey, why not do everything in Excel?</a></li>
 </ul>
 </li>
@@ -105,6 +105,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -173,48 +174,50 @@
             
   <div class="section" id="what-is-baangt">
 <h1>What is <code class="docutils literal notranslate"><span class="pre">baangt</span></code><a class="headerlink" href="#what-is-baangt" title="Permalink to this headline">¶</a></h1>
-<p>Testing software has always been a challenging field and it’s not getting easier or simpler as overall complexity in corporate
+<p>Testing software has always been a challenging field, and it’s not getting easier or simpler, as overall complexity in corporate
 and other applications skyrockets. Release cycles in larger corporations are often long because of inefficient regression
-tests. Also costs of software updates, upgrades and forward development is heavily impacted by too little test coverage.</p>
-<p><strong>To stop praying when you release to production you need to start serious testing!</strong></p>
-<p>With <code class="docutils literal notranslate"><span class="pre">baangt</span></code> youve one <em>open source</em> solution for all your test stages and needs. Be it Frontend with Webbrowser, API,
+tests. Also costs of software updates, upgrades and forward development are heavily impacted by too little test coverage.</p>
+<p><strong>To stop praying when you release to production, you need to start serious testing!</strong></p>
+<p>With <code class="docutils literal notranslate"><span class="pre">baangt</span></code> you have one <em>open source</em> solution for all your test stages and needs. Be it Frontend with Webbrowser, API,
 graphQL, SOAP, oData or chromium related App-Tests. You’ll use one toolset, one database per stage and one reporting to
 see at any given moment, how your stages and applications are doing and if it’s safe to release the current state of one
 stage to the next.</p>
 <blockquote>
-<div><p><code class="docutils literal notranslate"><span class="pre">baangt</span></code> is optimized to be super easy to start and flexible when your demand grows.</p>
+<div><p><code class="docutils literal notranslate"><span class="pre">baangt</span></code> is optimized to be super easy to start, and flexible when your demand grows.</p>
 </div></blockquote>
 <div class="section" id="the-fastest-simplest-way-to-record-test-cases">
 <h2>The fastest, simplest way to record test cases<a class="headerlink" href="#the-fastest-simplest-way-to-record-test-cases" title="Permalink to this headline">¶</a></h2>
-<p>If your requirements are pretty basic you’d start using <code class="docutils literal notranslate"><span class="pre">baangt</span></code> with a simple Excel-Sheet as source of Testcase definition and
-Testdata definition. This is super fast, very easy even for endusers but has limited flexibility, even though it comes packed
+<p>If your requirements are pretty basic, you’d start using <code class="docutils literal notranslate"><span class="pre">baangt</span></code> with a simple Excel-Sheet as source of Testcase definition and
+Testdata definition. This is super fast, very easy even for end-users but has limited flexibility, even though it comes packed
 with all features of the higher end solutions like reporting, fault tolerance, screenshots in case of errors and much more.</p>
 </div>
-<div class="section" id="still-simple-and-more-powerful-ways">
-<h2>Still simple and more powerful ways:<a class="headerlink" href="#still-simple-and-more-powerful-ways" title="Permalink to this headline">¶</a></h2>
-<p>As your requirements grow you’d have Testcase and testrun definition separately (e.g. you want to execute the same
+<div class="section" id="more-powerful-and-still-ways">
+<h2>More powerful and still ways:<a class="headerlink" href="#more-powerful-and-still-ways" title="Permalink to this headline">¶</a></h2>
+<p>As your requirements grow you want to have Testcase and testrun definition separately (e.g. you want to execute the same
 test cases on different stages of your system landscape (Pre-Quality, Final-Quality, Dev) and not for every heartbeat test
-you’d want to run through your 1000s of test data. Maybe you’ll have a SQL-Query in your Excel based data, which changes
-data records dynamically or per stage or per version, that you want to test for. Things are not so simple in this stage,
-but still simple enough for technically versed business department to run high quality tests on all stages by themselves.
-Even after the point, where you need technicians to integrate baangt with your CD/CI-Pipeline`s buildmanagement tools,
+you would want to run through your 1000s of records of test data. Maybe you will have a SQL-Query in your Excel based data, which changes
+data records dynamically or per stage or per version, that you want to test for.</p>
+<p>Things are not so simple in this stage, but still simple enough for technically versed business department to run high
+quality tests on all stages by themselves.</p>
+<p>Even after the point, where you need technicians to integrate baangt with your CD/CI-Pipeline`s build-management tools,
 the maintenance of data and test sequence can be done without ANY other tools (except Excel or OpenOffice) easily by the
 people who know best what to test: Your business department.</p>
 <div class="section" id="hey-why-not-do-everything-in-excel">
 <h3>Hey, why not do everything in Excel?<a class="headerlink" href="#hey-why-not-do-everything-in-excel" title="Permalink to this headline">¶</a></h3>
-<p>There is one serious drawback from this flexibilty: it’s <strong>change</strong>. Of course you started with 1 sheet, but later had some additional
-requirements and simply added a second sheet to cover those whithout changing the definitions of the first excel sheet.
+<p>There is one serious drawback from this flexibility: it’s <strong>change</strong>. Of course you started with 1 sheet, but later had some additional
+requirements and simply added a second sheet to cover those without changing the definitions of the first excel sheet.
 You’re still happy as you need both behaviours tested (imagine one test set for regional customers and another test set
-for customers from other countries). Great. Everything works. After having some serious problems in production and fixing
-those defects you decide to write a testcase to mimic a certain user behaviour (e.g. navigating back and forth multiple
-times, deleting and re-adding objects from a shopping chart, etc.). The basic test sequence would be still the same as in
+for customers from other countries). Great. Everything works.</p>
+<p>After having some serious problems in production and fixing
+those defects, you decide to write a testcase to mimic a certain user behavior (e.g. navigating back and forth multiple
+times, deleting and re-adding objects from a shopping cart, etc.). The basic test sequence would still be the same as in
 the other two cases, but for a specific card you’ll need changes. Simple. You copy one of the original sheets and adjust
 accordingly. You immediately sleep better because now also those cases are part of your growing regression test set. Wonderful.
-You continue like this for 2 months, end up with 2 or 3 datafiles and 20 test case definitions. That’s not uncommon. Also
+You continue like this for 2 months, end up with 2 or 3 datafiles and 20 test case definitions. That’s not uncommon. What is also
 not uncommon is “<strong>Change</strong>”. For more direct communication with the endusers the AUT (Application under test) get’s enriched
 with a Sentry-Popup. Wonderful idea. But wait… It’s not so great after all, because now you have to update 20 test case
-definitions with a way to deal with the new popup. Imagine corporate environments where we have many 1.000 or many 10.000
-tests.</p>
+definitions with a way to deal with the new popup. Imagine corporate environments where we have many thousands or many tens of
+thousands tests.</p>
 </div>
 </div>
 <div class="section" id="subclassing-for-multiply-used-functionality">
@@ -237,7 +240,7 @@ for your TestCase.</p>
 <p>You can subclass any other functionality, that doesn’t fully fit your needs (IBAN-Generation, Browser-Handling, Timing)
 and also create your own Assertion-classes (for instance if you need to receive data from a Host-System or
 RFC/SOAP-Connection or any other source that is not natively supported by <code class="docutils literal notranslate"><span class="pre">baangt.py</span></code>). Of course you’d only
-re-implement methods, that you need to enrich and consume everything else from the framework.</p>
+re-implement methods that you need to enrich, and consume everything else from the framework.</p>
 <p>Please consider creating pull-requests if you think some of your custom implemented functionality could be useful for
 others.</p>
 </div>
@@ -246,12 +249,12 @@ others.</p>
 <p>Enter the next stage: <code class="docutils literal notranslate"><span class="pre">baangtDB</span></code>. <code class="docutils literal notranslate"><span class="pre">baangtDB</span></code> does much more than just replace Excel as input and sequence source. BaangtDB
 provides modularization of your test cases. In the above example you’d maintain the Sentry-Popup exactly ONCE for all your
 test cases, where it applies.</p>
-<p>Also if you’re in a really large corporate environment, you’ll start facing problems with the XLS-Based solution as corporate
-governance, compliance, regulations and so on will sooner or later make it difficult to use the software in this way. Also
-even if you use <code class="docutils literal notranslate"><span class="pre">git</span></code> you experience problems with different versions of the Excel-Sheets - depending on your setup of course.</p>
+<p>If you’re in a really large corporate environment, you’ll start facing problems with the XLS-Based solution, as corporate
+governance, compliance, regulations and so on will sooner or later make it difficult to use the software in this way.
+Even if you use <code class="docutils literal notranslate"><span class="pre">git</span></code> you experience problems with different versions of the Excel-Sheets - depending on your setup of course.</p>
 <p>But still no need invest into expensive, licensed, closed source, proprietary solutions and depend on their good will.
-Run <code class="docutils literal notranslate"><span class="pre">baangtDB</span></code> (for testdata and testcase sequences) in a docker container on premises or in Cloud and have the full flexibility plus
-comfort for free.</p>
+Run <code class="docutils literal notranslate"><span class="pre">baangtDB</span></code> (for testdata and testcase sequences) in a docker container, on premises or in the cloud and have the full
+flexibility plus comfort for free.</p>
 </div>
 <div class="section" id="to-sum-it-up">
 <h2>To sum it up<a class="headerlink" href="#to-sum-it-up" title="Permalink to this headline">¶</a></h2>

+ 13 - 9
docs/_build/html/ParametersConfigFile.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Parameters in Configuration files (globals) &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Parameters in Configuration files (globals) &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -95,6 +95,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -163,7 +164,7 @@
             
   <div class="section" id="parameters-in-configuration-files-globals">
 <h1>Parameters in Configuration files (<code class="docutils literal notranslate"><span class="pre">globals</span></code>)<a class="headerlink" href="#parameters-in-configuration-files-globals" title="Permalink to this headline">¶</a></h1>
-<p>Generally it’s not needed to change parameters in the config files during manual or automated execution as the parameters
+<p>Generally it’s not needed to change parameters in the config files during manual or automated execution, as the parameters
 have default values or are anyway defined in the Testrun definition. Still sometimes it’s very handy to change them on the fly,
 for instance to slowly retest a single testrecord or to not close the browser after an error.</p>
 <table class="colwidths-given docutils align-default" id="id1">
@@ -179,11 +180,11 @@ for instance to slowly retest a single testrecord or to not close the browser af
 </thead>
 <tbody>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">Release</span></code></p></td>
-<td><p>As you move your maturing software through the system landscape you might still need regression test results based
+<td><p>As you move your maturing software through the system landscape, you might still need regression test results based
 on “old” release functionality, while on lower stages you might want to (regression)-test already newer versions
 or newer functionality. In <code class="docutils literal notranslate"><span class="pre">baangt</span></code> there is no need to copy test cases in those situations. You simply update
-your test case definition with the apropriate version number (e.g. &gt;= 2020-10) and set the proper <code class="docutils literal notranslate"><span class="pre">Release</span></code> in
-the config file, for instance “2020-09” when you want to run on final quality and the changes from verison “2020-10”
+your test case definition with the appropriate version number (e.g. &gt;= 2020-10) and set the proper <code class="docutils literal notranslate"><span class="pre">Release</span></code> in
+the config file. For instance “2020-09” when you want to run on final quality and the changes from version “2020-10”
 are not there yet.</p>
 <blockquote>
 <div><p>Note for developers:</p>
@@ -193,12 +194,12 @@ simply subclass TestStepMaster and overwrite only the method <code class="docuti
 </td>
 </tr>
 <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">TC.slowExecution</span></code></p></td>
-<td><p>When set to <code class="docutils literal notranslate"><span class="pre">true</span></code> the browser will stop for a short time after each command, so that you can also visually see what the browser is doing</p></td>
+<td><p>When set to <code class="docutils literal notranslate"><span class="pre">true</span></code>, the browser will stop for a short time after each command, so that you can also visually see what the browser is doing</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">dontCloseBrowser</span></code></p></td>
-<td><p>When the browser or script finds an error usually it takes a screenshot and moves on to the next testcase. With this setting to <code class="docutils literal notranslate"><span class="pre">True</span></code> the Browsersession will stop right at the error</p></td>
+<td><p>When the browser or script finds an error, it usually takes a screenshot and moves on to the next testcase. With this setting to <code class="docutils literal notranslate"><span class="pre">True</span></code> the browser session will stop right at the error.</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">TC.BrowserOptions</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">TC.BrowserAttributes</span></code></p></td>
 <td><p>Set the value to <code class="docutils literal notranslate"><span class="pre">{'HEADLESS':</span> <span class="pre">'True'}</span></code> to run Chrome/Firefox in headless mode.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">TC.Lines</span></code></p></td>
@@ -214,7 +215,10 @@ simply subclass TestStepMaster and overwrite only the method <code class="docuti
 <td><p>If the testcase is WEB-Testing, then you can overwrite the browser, which is defined inside the testrun definition. If the testcase is not a Web-Testcase this setting doesn’t have any effect. Valid values are <code class="docutils literal notranslate"><span class="pre">Chrome</span></code>, <code class="docutils literal notranslate"><span class="pre">FF</span></code> and <code class="docutils literal notranslate"><span class="pre">Safari</span></code></p></td>
 </tr>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">TC.ParallelRuns</span></code></p></td>
-<td><p>Number of parallel sessions to be executing. Values depend largely on your hardware and internet connection. Debugging works only in a single session.</p></td>
+<td><p>Number of parallel sessions to be executed. Values depend largely on your hardware and internet connection. Debugging works only in a single session.</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">TC.NetworkInfo</span></code></p></td>
+<td><p>Creates a very detailed trace of network activity of the browser(s). In the output file you’ll find another Tab “Network”, that holds all API-Calls from the frontend (including header, payload and answer).</p></td>
 </tr>
 </tbody>
 </table>

+ 17 - 11
docs/_build/html/PlannedFeatures.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Future Features &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Future Features &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -35,7 +35,7 @@
   <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Not Exactly Documentation" href="articles/Articles.html" />
+    <link rel="next" title="Handling of Browser Drivers" href="BrowserDrivers.html" />
     <link rel="prev" title="Change log" href="changelog.html" /> 
 </head>
 
@@ -100,6 +100,7 @@
 <li class="toctree-l2"><a class="reference internal" href="#pro-features">PRO-Features</a></li>
 </ul>
 </li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -172,20 +173,22 @@
 <div class="section" id="short-medium-term-features">
 <h2>Short/Medium term features<a class="headerlink" href="#short-medium-term-features" title="Permalink to this headline">¶</a></h2>
 <ul class="simple">
-<li><p>Refactoring of Multiprocessing (2020.02)</p></li>
-<li><p>Executables on Mac, Linux and Windows (2020.03)</p></li>
+<li><p>Refactoring of parallel processing on a single computer (2020.03) –&gt; Done</p></li>
+<li><p>Executables on Mac, Linux and Windows (2020.03) –&gt; Done</p></li>
 <li><dl class="simple">
 <dt>Nicer interactive UI-Starter (2020.03)</dt><dd><ul>
 <li><p>Phase 1 done 2020.02</p></li>
-<li><p>Provide live statistics (2020.03)</p></li>
+<li><p>Phase 2 (UI-elements) (2020.03) –&gt; will move to 2020.04 RC5</p></li>
+<li><p>Provide live statistics (2020.04)</p></li>
 </ul>
 </dd>
 </dl>
 </li>
-<li><p>Build-In Proxy-Server for Network traffic and timing logs (2020.03) (most probably not possible in Windows and MAC but should work in Linux)</p></li>
-<li><p>Double Opt-In Automation (2020.03)</p></li>
-<li><p>Support for Selenium Grid V4 (2020.03)</p></li>
+<li><p>Double Opt-In Automation (2020.03) –&gt; will move to 2020.04 RC6</p></li>
+<li><p>Support for Selenium Grid V4 (2020.04)</p></li>
 <li><p>Better support for multiple sources (e.g. multiple XLSX) of test data (2020.04)</p></li>
+<li><p>Better support to store test data output to database and export files (2020.04)</p></li>
+<li><p>Support for Appium integration (2020.04)</p></li>
 <li><p>Katalon Importer/Converter as Webservice (2020.04)</p></li>
 </ul>
 </div>
@@ -198,7 +201,8 @@
 <li><p>Integration with Atlassian Confluence (for Testcase and Testrun definitions)</p></li>
 <li><p>Integration with Atlassian Confluence (to publish results of testruns)</p></li>
 <li><p>Integration with MS Teams to publish results of Testruns</p></li>
-<li><p>Grafana Board for Flask-Version</p></li>
+<li><p>Integration with Telegram to publish results of Testruns</p></li>
+<li><p>Grafana Board for baangtDB</p></li>
 <li><p>Better support for oData V4.0 (similar to SOAP)</p></li>
 <li><p>Support for GraphQL via Graphene</p></li>
 </ul>
@@ -209,10 +213,12 @@
 Future features might include:</p>
 <ul class="simple">
 <li><p>DB-Migration tools (to ease the pain of upgrading databases)</p></li>
-<li><p>Multi-User environment (who did when which activity and who changed when which testobject)</p></li>
+<li><p>Multi-User environment (who did when which activity and who changed when which test object)</p></li>
 <li><p>History of Testcases (what was changed when. If urgently needed we could come up with DB-Dump and GIT diff or so.)</p></li>
 <li><p>Test-Canons (deliberately stop test cases multiple times at certain test steps, wait for trigger, then resume. After first Testcase <em>finished</em> his first waiting period, start second round of Testcases (that’s how the name “Canon” came up). So far implemented in customer project, but needs to be polished up for public version)</p></li>
 <li><p>XML/PDF-Compare</p></li>
+<li><p>Consulting</p></li>
+<li><p>Priority support</p></li>
 </ul>
 </div>
 </div>
@@ -225,7 +231,7 @@ Future features might include:</p>
   
     <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
       
-        <a href="articles/Articles.html" class="btn btn-neutral float-right" title="Not Exactly Documentation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+        <a href="BrowserDrivers.html" class="btn btn-neutral float-right" title="Handling of Browser Drivers" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
         <a href="changelog.html" class="btn btn-neutral float-left" title="Change log" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>

+ 32 - 1
docs/_build/html/SimpleAPI.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>How to create a simple API Test &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>How to create a simple API Test &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -103,6 +103,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -240,6 +241,36 @@ your only chance to get fields added into the result sheet.
 <code class="docutils literal notranslate"><span class="pre">value2</span></code> is the source (e.g. <code class="docutils literal notranslate"><span class="pre">$(ANSWER_CONTENT.imdbRating)</span></code> would retrieve the value “imdbRating” of the
 answer of your API-Call.</p></td>
 </tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">ASSERT</span></code></p></td>
+<td><p>This  will retrieve value of element specified by <cite>locator</cite>
+And compare with expected_value specified in <cite>value</cite></p>
+<p>if expected_value not matches with output_value it will raise TestStepExecution and result in FAILED.</p>
+</td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">ADDRESS_CREATE</span></code></p></td>
+<td><p>Create  Address Data for various test cases  and save in testDataDict
+The following field variable can be used via $(field_name).</p>
+<p>[‘HouseNumber’, ‘AdditionalData1’, ‘AdditionalData2’, ‘StreetName’, ‘CityName’, ‘PostalCode’, ‘CountryCode’]</p>
+<dl class="simple">
+<dt>Example:</dt><dd><p>Default Data: (value=&lt;blank&gt; and value2=&lt;blank&gt;)
+‘HouseNumber’: ‘6’, ‘AdditionalData1’: ‘Near MahavirChowk’, ‘AdditionalData2’: ‘Opposite St. Marish Church’, ‘StreetName’: ‘GoreGaon’, ‘CityName’: ‘Ambala’, ‘PostalCode’: ‘160055’, ‘CountryCode’: ‘India’</p>
+</dd>
+<dt><cite>value</cite> optional</dt><dd><dl class="simple">
+<dt>if provided<span class="classifier">(value= {“CountryCode”:”US”,”CityName”:”Athens”} value2=&lt;blank&gt;)</span></dt><dd><p>FieldValue updated to:
+{‘HouseNumber’: ‘6’, ‘AdditionalData1’: ‘Near MahavirChowk’,
+‘AdditionalData2’: ‘Opposite St. Marish Church’,
+‘StreetName’: ‘GoreGaon’, ‘CityName’: ‘Athens’,
+‘PostalCode’: ‘160055’, ‘CountryCode’: ‘US’}</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<p><cite>value2</cite> optional</p>
+<blockquote>
+<div><p>Field will be prefixed with “office_&lt;field_name&gt;”. Ex. “office_CountryCode”</p>
+</div></blockquote>
+</td>
+</tr>
 </tbody>
 </table>
 </div>

+ 5 - 4
docs/_build/html/Structure.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Structure of baangt &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Structure of baangt &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -102,6 +102,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -170,7 +171,7 @@
             
   <div class="section" id="structure-of-baangt">
 <h1>Structure of baangt<a class="headerlink" href="#structure-of-baangt" title="Permalink to this headline">¶</a></h1>
-<p>If you never used any test automation software before these terms can be intimidating, but in reality it’s all very simple.</p>
+<p>If you never used any test automation software before, these terms can be intimidating, but in reality it’s all very simple.</p>
 <p>We’ll start from the bottom to the top.</p>
 <div class="section" id="teststep">
 <h2>TestStep<a class="headerlink" href="#teststep" title="Permalink to this headline">¶</a></h2>
@@ -191,7 +192,7 @@ Duration in Seconds)</p>
 <p>A Testcase is a Sequence of TestStepSequences. You might wonder, why this additional TestStepSequence is needed, why not
 simply write the TestSteps directly into the TestCase.</p>
 <p>First of all: you don’t need the TestStepSequence. In the simple XLSX-Format this grouping area doesn’t exist.
-Second: Imagine youve a login-page, a product bucket, product return functionality and invoice reprint functionality in
+Second: Imagine you have a login-page, a product bucket, product return functionality and invoice reprint functionality in
 your SPA and you want to test all of them. Obviously you’ll have at least 3 Testcases, but in all of them you’ll have to
 do a login. You can use the TestStepSequence to extract this repeated Sequence.</p>
 <p>In a Testcase we define not only the Sequence of TestStepSequences but also which type of Testcase (Browser, API, etc.)
@@ -207,7 +208,7 @@ connection to the datafile(s) to be used and which records to process in this Te
 for instance group together the execution of a WEB-Page TestCase and subsequently the execution of an API-Call to retrieve
 results from another system. This scenario is of course mostly for corporate system landscapes, where the frontend (Web) communicates
 more or less asynchronous with backend components like Hosts, CRM-Systems, SAP-Backends and so on.</p>
-<p>By all means - if you don’t need it - don’t use it. But in case you need it, it’s good to know it’s there.</p>
+<p>By all means if you don’t need it: don’t use it. But in case you need it, it’s good to know it’s there.</p>
 </div>
 <div class="section" id="testrun">
 <h2>TestRun<a class="headerlink" href="#testrun" title="Permalink to this headline">¶</a></h2>

+ 2 - 1
docs/_build/html/TestTypes.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Types of tests &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Types of tests &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -108,6 +108,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

BIN
docs/_build/html/_images/vncDesktopSeleniumGridDocker.png


+ 28 - 0
docs/_build/html/_sources/BrowserDrivers.rst.txt

@@ -0,0 +1,28 @@
+Handling of Browser Drivers
+===========================
+
+When you install ``baangt`` the latest version of Chromedriver and Geckodriver (for Firefox) are included. Depending on your
+situation you might need different drivers.
+
+New release of browser drivers
+------------------------------
+
+As you work with ``baangt`` for a longer time your browsers might be updated. If you receive an error telling about wrong
+version of browser driver, you can simply delete the existing driver in ``baangt/BrowserDrivers/`` and on the next start
+``baangt`` will automatically download the latest version.
+
+Alternative version:
+^^^^^^^^^^^^^^^^^^^^
+
+If you start baangt with the following syntax from the command line, it will download the latest drivers (Chrome and
+Firefox) automatically:
+
+```python3 baangt.py --reloadDrivers=True```
+
+It will overwrite existing versions.
+
+Older releases of browser drivers
+---------------------------------
+
+Please download the release that you need from chrome and/or Firefox and replace the existing files in ``baangt/BrowserDrivers/``
+which the freshly downloaded, older version. After the next start it should work fine.

+ 3 - 3
docs/_build/html/_sources/DataFile.rst.txt

@@ -4,9 +4,9 @@ Special functions in datafiles
 Datafiles (or in Excel Simple format simply a tab "data") generally hold the data for one or more testcases.
 
 The first line of the datafile holds the header line. Each cell in the header must have a unique value and acts as variablename,
-that you can use for either checking, for IF-Statements or as values to write into fields or comapare with assertions.
+which you can use for checking, for IF-Statements or as values to write into fields or compare with assertions.
 
-Additionally there are some reserved names, that deliver the following functionality:
+Additionally there are some reserved names that deliver the following functionality:
 
 .. list-table:: Field names in Datafiles and their function
    :widths: 25 75
@@ -14,7 +14,7 @@ Additionally there are some reserved names, that deliver the following functiona
 
    * - Field name
      - Description
-   * - ``TC Expected Error``
+   * - ``TC Expected Error`` (!sic)
      - When set to value ``X``, the Test case is supposed to fail. If it fails (as expected) the status of the testcase is set to OK.
    * - ``JSON``
      - Please don't use this fieldname, as we're using it internally to store data.

+ 11 - 1
docs/_build/html/_sources/Developer.rst.txt

@@ -48,4 +48,14 @@ Plugins
 -------
 
 Please make yourself familiar with https://pluggy.readthedocs.io/en/latest/ in order to implement Plugins.
-If you're stuck let me know.
+If you're stuck let me know.
+
+Network trace
+-------------
+
+Sometimes it's useful (especially for frontend debugging and in performance measurments) to have more detailed log about
+the calls that the browser exchanges with the backend. If you need this, use ``TC.NetworkInfo`` with value = ``True``.
+In the output file you'll see a new tab "Network" that shows all calls, headers, payload and timing information for each
+call.
+
+Use with care, as the file can get pretty big.

+ 32 - 27
docs/_build/html/_sources/OverviewUsage.rst.txt

@@ -2,55 +2,60 @@
 What is ``baangt``
 ============================
 
-Testing software has always been a challenging field and it's not getting easier or simpler as overall complexity in corporate
+Testing software has always been a challenging field, and it's not getting easier or simpler, as overall complexity in corporate
 and other applications skyrockets. Release cycles in larger corporations are often long because of inefficient regression
-tests. Also costs of software updates, upgrades and forward development is heavily impacted by too little test coverage.
+tests. Also costs of software updates, upgrades and forward development are heavily impacted by too little test coverage.
 
-**To stop praying when you release to production you need to start serious testing!**
+**To stop praying when you release to production, you need to start serious testing!**
 
-With ``baangt`` you've one *open source* solution for all your test stages and needs. Be it Frontend with Webbrowser, API,
+With ``baangt`` you have one *open source* solution for all your test stages and needs. Be it Frontend with Webbrowser, API,
 graphQL, SOAP, oData or chromium related App-Tests. You'll use one toolset, one database per stage and one reporting to
 see at any given moment, how your stages and applications are doing and if it's safe to release the current state of one
 stage to the next.
 
-    ``baangt`` is optimized to be super easy to start and flexible when your demand grows.
+    ``baangt`` is optimized to be super easy to start, and flexible when your demand grows.
 
 The fastest, simplest way to record test cases
 ----------------------------------------------
 
-If your requirements are pretty basic you'd start using ``baangt`` with a simple Excel-Sheet as source of Testcase definition and
-Testdata definition. This is super fast, very easy even for endusers but has limited flexibility, even though it comes packed
+If your requirements are pretty basic, you'd start using ``baangt`` with a simple Excel-Sheet as source of Testcase definition and
+Testdata definition. This is super fast, very easy even for end-users but has limited flexibility, even though it comes packed
 with all features of the higher end solutions like reporting, fault tolerance, screenshots in case of errors and much more.
 
 
-Still simple and more powerful ways:
+More powerful and still ways:
 ------------------------------------
 
-As your requirements grow you'd have Testcase and testrun definition separately (e.g. you want to execute the same
+As your requirements grow you want to have Testcase and testrun definition separately (e.g. you want to execute the same
 test cases on different stages of your system landscape (Pre-Quality, Final-Quality, Dev) and not for every heartbeat test
-you'd want to run through your 1000s of test data. Maybe you'll have a SQL-Query in your Excel based data, which changes
-data records dynamically or per stage or per version, that you want to test for. Things are not so simple in this stage,
-but still simple enough for technically versed business department to run high quality tests on all stages by themselves.
-Even after the point, where you need technicians to integrate baangt with your CD/CI-Pipeline`s buildmanagement tools,
+you would want to run through your 1000s of records of test data. Maybe you will have a SQL-Query in your Excel based data, which changes
+data records dynamically or per stage or per version, that you want to test for.
+
+Things are not so simple in this stage, but still simple enough for technically versed business department to run high
+quality tests on all stages by themselves.
+
+Even after the point, where you need technicians to integrate baangt with your CD/CI-Pipeline`s build-management tools,
 the maintenance of data and test sequence can be done without ANY other tools (except Excel or OpenOffice) easily by the
 people who know best what to test: Your business department.
 
 Hey, why not do everything in Excel?
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-There is one serious drawback from this flexibilty: it's **change**. Of course you started with 1 sheet, but later had some additional
-requirements and simply added a second sheet to cover those whithout changing the definitions of the first excel sheet.
+There is one serious drawback from this flexibility: it's **change**. Of course you started with 1 sheet, but later had some additional
+requirements and simply added a second sheet to cover those without changing the definitions of the first excel sheet.
 You're still happy as you need both behaviours tested (imagine one test set for regional customers and another test set
-for customers from other countries). Great. Everything works. After having some serious problems in production and fixing
-those defects you decide to write a testcase to mimic a certain user behaviour (e.g. navigating back and forth multiple
-times, deleting and re-adding objects from a shopping chart, etc.). The basic test sequence would be still the same as in
+for customers from other countries). Great. Everything works.
+
+After having some serious problems in production and fixing
+those defects, you decide to write a testcase to mimic a certain user behavior (e.g. navigating back and forth multiple
+times, deleting and re-adding objects from a shopping cart, etc.). The basic test sequence would still be the same as in
 the other two cases, but for a specific card you'll need changes. Simple. You copy one of the original sheets and adjust
 accordingly. You immediately sleep better because now also those cases are part of your growing regression test set. Wonderful.
-You continue like this for 2 months, end up with 2 or 3 datafiles and 20 test case definitions. That's not uncommon. Also
+You continue like this for 2 months, end up with 2 or 3 datafiles and 20 test case definitions. That's not uncommon. What is also
 not uncommon is "**Change**". For more direct communication with the endusers the AUT (Application under test) get's enriched
 with a Sentry-Popup. Wonderful idea. But wait... It's not so great after all, because now you have to update 20 test case
-definitions with a way to deal with the new popup. Imagine corporate environments where we have many 1.000 or many 10.000
-tests.
+definitions with a way to deal with the new popup. Imagine corporate environments where we have many thousands or many tens of
+thousands tests.
 
 Subclassing for multiply used functionality
 -------------------------------------------
@@ -77,7 +82,7 @@ for your TestCase.
 You can subclass any other functionality, that doesn't fully fit your needs (IBAN-Generation, Browser-Handling, Timing)
 and also create your own Assertion-classes (for instance if you need to receive data from a Host-System or
 RFC/SOAP-Connection or any other source that is not natively supported by ``baangt.py``). Of course you'd only
-re-implement methods, that you need to enrich and consume everything else from the framework.
+re-implement methods that you need to enrich, and consume everything else from the framework.
 
 Please consider creating pull-requests if you think some of your custom implemented functionality could be useful for
 others.
@@ -90,13 +95,13 @@ Enter the next stage: ``baangtDB``. ``baangtDB`` does much more than just replac
 provides modularization of your test cases. In the above example you'd maintain the Sentry-Popup exactly ONCE for all your
 test cases, where it applies.
 
-Also if you're in a really large corporate environment, you'll start facing problems with the XLS-Based solution as corporate
-governance, compliance, regulations and so on will sooner or later make it difficult to use the software in this way. Also
-even if you use ``git`` you experience problems with different versions of the Excel-Sheets - depending on your setup of course.
+If you're in a really large corporate environment, you'll start facing problems with the XLS-Based solution, as corporate
+governance, compliance, regulations and so on will sooner or later make it difficult to use the software in this way.
+Even if you use ``git`` you experience problems with different versions of the Excel-Sheets - depending on your setup of course.
 
 But still no need invest into expensive, licensed, closed source, proprietary solutions and depend on their good will.
-Run ``baangtDB`` (for testdata and testcase sequences) in a docker container on premises or in Cloud and have the full flexibility plus
-comfort for free.
+Run ``baangtDB`` (for testdata and testcase sequences) in a docker container, on premises or in the cloud and have the full
+flexibility plus comfort for free.
 
 To sum it up
 ------------

+ 10 - 8
docs/_build/html/_sources/ParametersConfigFile.rst.txt

@@ -1,7 +1,7 @@
 Parameters in Configuration files (``globals``)
 ===============================================
 
-Generally it's not needed to change parameters in the config files during manual or automated execution as the parameters
+Generally it's not needed to change parameters in the config files during manual or automated execution, as the parameters
 have default values or are anyway defined in the Testrun definition. Still sometimes it's very handy to change them on the fly,
 for instance to slowly retest a single testrecord or to not close the browser after an error.
 
@@ -12,11 +12,11 @@ for instance to slowly retest a single testrecord or to not close the browser af
    * - Parameter
      - Description
    * - ``Release``
-     - As you move your maturing software through the system landscape you might still need regression test results based
+     - As you move your maturing software through the system landscape, you might still need regression test results based
        on "old" release functionality, while on lower stages you might want to (regression)-test already newer versions
        or newer functionality. In ``baangt`` there is no need to copy test cases in those situations. You simply update
-       your test case definition with the apropriate version number (e.g. >= 2020-10) and set the proper ``Release`` in
-       the config file, for instance "2020-09" when you want to run on final quality and the changes from verison "2020-10"
+       your test case definition with the appropriate version number (e.g. >= 2020-10) and set the proper ``Release`` in
+       the config file. For instance "2020-09" when you want to run on final quality and the changes from version "2020-10"
        are not there yet.
 
             Note for developers:
@@ -24,10 +24,10 @@ for instance to slowly retest a single testrecord or to not close the browser af
             It's a static method - if you need to apply different versioning schema for your system landscape,
             simply subclass TestStepMaster and overwrite only the method ``ifQualifyForExecution``.
    * - ``TC.slowExecution``
-     - When set to ``true`` the browser will stop for a short time after each command, so that you can also visually see what the browser is doing
+     - When set to ``true``, the browser will stop for a short time after each command, so that you can also visually see what the browser is doing
    * - ``dontCloseBrowser``
-     - When the browser or script finds an error usually it takes a screenshot and moves on to the next testcase. With this setting to ``True`` the Browsersession will stop right at the error
-   * - ``TC.BrowserOptions``
+     - When the browser or script finds an error, it usually takes a screenshot and moves on to the next testcase. With this setting to ``True`` the browser session will stop right at the error.
+   * - ``TC.BrowserAttributes``
      - Set the value to ``{'HEADLESS': 'True'}`` to run Chrome/Firefox in headless mode.
    * - ``TC.Lines``
      - Which lines from datafile to process.
@@ -39,7 +39,9 @@ for instance to slowly retest a single testrecord or to not close the browser af
    * - ``TC.Browser``
      - If the testcase is WEB-Testing, then you can overwrite the browser, which is defined inside the testrun definition. If the testcase is not a Web-Testcase this setting doesn't have any effect. Valid values are ``Chrome``, ``FF`` and ``Safari``
    * - ``TC.ParallelRuns``
-     - Number of parallel sessions to be executing. Values depend largely on your hardware and internet connection. Debugging works only in a single session.
+     - Number of parallel sessions to be executed. Values depend largely on your hardware and internet connection. Debugging works only in a single session.
+   * - ``TC.NetworkInfo``
+     - Creates a very detailed trace of network activity of the browser(s). In the output file you'll find another Tab "Network", that holds all API-Calls from the frontend (including header, payload and answer).
 
 # Todo:
 BrowserAttributes

+ 13 - 8
docs/_build/html/_sources/PlannedFeatures.rst.txt

@@ -4,15 +4,17 @@ We implement all features for 3 operating Systems (Mac, Windows, Debian Linux an
 
 Short/Medium term features
 ---------------------------
-* Refactoring of Multiprocessing (2020.02)
-* Executables on Mac, Linux and Windows (2020.03)
+* Refactoring of parallel processing on a single computer (2020.03) --> Done
+* Executables on Mac, Linux and Windows (2020.03) --> Done
 * Nicer interactive UI-Starter (2020.03)
     * Phase 1 done 2020.02
-    * Provide live statistics (2020.03)
-* Build-In Proxy-Server for Network traffic and timing logs (2020.03) (most probably not possible in Windows and MAC but should work in Linux)
-* Double Opt-In Automation (2020.03)
-* Support for Selenium Grid V4 (2020.03)
+    * Phase 2 (UI-elements) (2020.03) --> will move to 2020.04 RC5
+    * Provide live statistics (2020.04)
+* Double Opt-In Automation (2020.03) --> will move to 2020.04 RC6
+* Support for Selenium Grid V4 (2020.04)
 * Better support for multiple sources (e.g. multiple XLSX) of test data (2020.04)
+* Better support to store test data output to database and export files (2020.04)
+* Support for Appium integration (2020.04)
 * Katalon Importer/Converter as Webservice (2020.04)
 
 Features for later
@@ -23,7 +25,8 @@ Features for later
 * Integration with Atlassian Confluence (for Testcase and Testrun definitions)
 * Integration with Atlassian Confluence (to publish results of testruns)
 * Integration with MS Teams to publish results of Testruns
-* Grafana Board for Flask-Version
+* Integration with Telegram to publish results of Testruns
+* Grafana Board for baangtDB
 * Better support for oData V4.0 (similar to SOAP)
 * Support for GraphQL via Graphene
 
@@ -33,8 +36,10 @@ There's no time plan yet, when a pro version will be released. So far whatever w
 Future features might include:
 
 * DB-Migration tools (to ease the pain of upgrading databases)
-* Multi-User environment (who did when which activity and who changed when which testobject)
+* Multi-User environment (who did when which activity and who changed when which test object)
 * History of Testcases (what was changed when. If urgently needed we could come up with DB-Dump and GIT diff or so.)
 * Test-Canons (deliberately stop test cases multiple times at certain test steps, wait for trigger, then resume. After first Testcase *finished* his first waiting period, start second round of Testcases (that's how the name "Canon" came up). So far implemented in customer project, but needs to be polished up for public version)
 * XML/PDF-Compare
+* Consulting
+* Priority support
 

+ 30 - 0
docs/_build/html/_sources/SimpleAPI.rst.txt

@@ -63,6 +63,36 @@ Activities for API-Tests:
        ``value2`` is the source (e.g. ``$(ANSWER_CONTENT.imdbRating)`` would retrieve the value "imdbRating" of the
        answer of your API-Call.
 
+   * - ``ASSERT``
+     - This  will retrieve value of element specified by `locator`
+       And compare with expected_value specified in `value`
+      
+       if expected_value not matches with output_value it will raise TestStepExecution and result in FAILED.
+
+   * - ``ADDRESS_CREATE``
+     - Create  Address Data for various test cases  and save in testDataDict
+       The following field variable can be used via $(field_name).
+       
+       ['HouseNumber', 'AdditionalData1', 'AdditionalData2', 'StreetName', 'CityName', 'PostalCode', 'CountryCode']
+    
+       Example:
+        Default Data: (value=<blank> and value2=<blank>)
+        'HouseNumber': '6', 'AdditionalData1': 'Near MahavirChowk', 'AdditionalData2': 'Opposite St. Marish Church', 'StreetName': 'GoreGaon', 'CityName': 'Ambala', 'PostalCode': '160055', 'CountryCode': 'India'
+
+       `value` optional
+        if provided : (value= {"CountryCode":"US","CityName":"Athens"} value2=<blank>)
+         FieldValue updated to:
+         {'HouseNumber': '6', 'AdditionalData1': 'Near MahavirChowk',
+         'AdditionalData2': 'Opposite St. Marish Church',
+         'StreetName': 'GoreGaon', 'CityName': 'Athens',
+         'PostalCode': '160055', 'CountryCode': 'US'}
+ 
+
+       `value2` optional
+
+        Field will be prefixed with "office_<field_name>". Ex. "office_CountryCode"
+
+
 Special data fields in API-Tests:
 ---------------------------------
 

+ 3 - 3
docs/_build/html/_sources/Structure.rst.txt

@@ -1,7 +1,7 @@
 Structure of baangt
 ===============================================
 
-If you never used any test automation software before these terms can be intimidating, but in reality it's all very simple.
+If you never used any test automation software before, these terms can be intimidating, but in reality it's all very simple.
 
 We'll start from the bottom to the top.
 
@@ -28,7 +28,7 @@ A Testcase is a Sequence of TestStepSequences. You might wonder, why this additi
 simply write the TestSteps directly into the TestCase.
 
 First of all: you don't need the TestStepSequence. In the simple XLSX-Format this grouping area doesn't exist.
-Second: Imagine you've a login-page, a product bucket, product return functionality and invoice reprint functionality in
+Second: Imagine you have a login-page, a product bucket, product return functionality and invoice reprint functionality in
 your SPA and you want to test all of them. Obviously you'll have at least 3 Testcases, but in all of them you'll have to
 do a login. You can use the TestStepSequence to extract this repeated Sequence.
 
@@ -46,7 +46,7 @@ for instance group together the execution of a WEB-Page TestCase and subsequentl
 results from another system. This scenario is of course mostly for corporate system landscapes, where the frontend (Web) communicates
 more or less asynchronous with backend components like Hosts, CRM-Systems, SAP-Backends and so on.
 
-By all means - if you don't need it - don't use it. But in case you need it, it's good to know it's there.
+By all means if you don't need it: don't use it. But in case you need it, it's good to know it's there.
 
 TestRun
 -------

+ 1 - 1
docs/_build/html/_sources/articles/AgileWorkflowIntegration.rst.txt

@@ -1,7 +1,7 @@
 Agile: Where does ``baangt`` fit in?
 ====================================
 
-``baangt`` supports all you ever dreamed of - you can start right away with TDD, where you create Test-Cases before you
+``baangt`` supports all your agile mindset ever dreamed of - you can start right away with TDD, where you create Test-Cases before you
 even write code (Just don't forget to set the test case version number to a future version).
 
 Increment testing is the next logical consequence, where you'll use your test cases defined in the previous step to verify

+ 4 - 1
docs/_build/html/_sources/articles/Articles.rst.txt

@@ -11,4 +11,7 @@ This section contains articles, that are not exactly documentation. Some are mor
     Test data rulez </articles/DataDoctor.rst>
     Industries 4 baangt </articles/BaangtIndustries.rst>
     Stop testing! </articles/StopTesting.rst>
-    bAanGtILE </articles/AgileWorkflowIntegration.rst>
+    bAanGtILE </articles/AgileWorkflowIntegration.rst>
+    BugSoup </articles/BugSoup.rst>
+    Canons, that are not DSLR nor music </articles/AsynchronousAndCanonTests.rst>
+    SeleniumGridV4 </articles/SeleniumGridV4WithBaangt.rst>

+ 132 - 0
docs/_build/html/_sources/articles/AsynchronousAndCanonTests.rst.txt

@@ -0,0 +1,132 @@
+Asynchronous vs. Canon tests
+============================
+
+Abstract
+--------
+
+Whenever you can't grab the verification of your test assumption right away, you're in an **asynchronous** scenario. When
+you have an End2End-Scenario where this happens in more than one steps, you could consider setting up a test Canon.
+Borrowed from music, a test canon will start with one test case until the halt condition is reached. Once the case can
+continue (e.g. because a trigger arrived), the canon will not only continue to run the first test case in it's second
+step but also start a new initial sequence of the same test case.
+
+-------
+
+Isn't everything asynchronous?
+------------------------------
+
+By nature basically every test is asynchronous, because we always wait for a reaction of the System under test. In most
+cases, we're talking about Microseconds up to a few seconds. You'll not do anything special with waiting times up to
+a few seconds. As you run anyway 50 or 500 parallel sessions, it doesn't really matter. But what if we need to wait
+for e.g. 10 Minutes, 30 Minutes, 8 hours? We shouldn't waste resources (like CPU-Time and blocked processes) to wait for
+extended times.
+
+Polling vs. Events
+^^^^^^^^^^^^^^^^^^
+
+**Polling** means to have your currently active test case poll repeatedly for an event in a more or less fixed timely
+interval. That's nice for smaller waiting periods and smaller installations. When you run with 500 parallel sessions and
+you query a service every 500 ms for a specific answer you may create a unrealistic load to that service. You also
+consume resources of your test environment, which are then not available for other tasks. For ``baangt`` we recommend
+to use polling for expected short waiting times (several seconds up to minutes) - but that's not a hard rule. YMMV.
+
+**Events** (aka Callbacks) are the opposite. Your test case pauses and doesn't do anything until an external trigger
+appears. Of course callbacks are more difficult to implement as you not only need to query a service repeatedly, but first
+implement a callback service as well as the call to the callback service (even when it's done via Kafka or Redis).
+
+These callbacks are additional components of your system landscape, that need to be developed, tested and maintained.
+
+Deep dive on test Canons
+------------------------
+
+What is a test Canon? It is basically the same concept as a canon in music for a combination of asynchronously executed
+test steps over and over again in order to have one test result for each test step at any given time slice.
+
+    From Wikipedia_:
+
+    In music, a canon is a contrapuntal (counterpoint-based) compositional technique that employs a melody with **one or**
+    **more imitations** of the melody played after a given duration (e.g., quarter rest, one measure, etc.).
+
+.. _Wikipedia: https://en.wikipedia.org/wiki/Canon_(music)
+.. _Youtube: https://www.youtube.com/watch?v=S9MN2WeqFY8
+
+See the music canon in action on Youtube_
+
+How does it apply to testing processes?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Imagine the following (simplified) test case sequence (in combination with a mainframe or SAP-System):
+
+#. Create material master data in Backend. Validate: Material available in online shop (asynchronous)
+#. Create sales order. Validate: Increased demand in material resource planning (batch)
+#. Create delivery and shipping. Validate: Reduced stock of materials (asynchronous)
+#. Create invoice. Validate: Invoice amount posted to A/R (batch)
+#. Create payment. Validate: Open item closed (batch)
+#. Create goods return. Validate: Special quality stock increased (asynchronous)
+#. Create credit note. Validate: Amount of credit note in A/P (batch)
+#. Create outgoing payment. Validate: Open item closed
+
+In this example there are 4 batch processes, that we need to wait for before we can tell, whether the whole E2E-Scenario
+works or not. Without any measures this means to wait for 5 days until we have a test result. Real use cases are not that simple and would
+take longer. Back in the days when there was a month of User acceptance test (UAT) this was fine. Now with always shorter
+release cycles you can't survive without new approaches.
+
+How the test Canon works
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+========================  = = = = = = = = =
+Canons and                D A Y S / E X E C
+------------------------  - - - - - - - - -
+Teststeps                 1 2 3 4 5 6 7 8 9
+========================  = = = = = = = = =
+Canon 1 - Teststep 1 + 2  X
+Canon 1 - Teststep 3 + 4    X
+Canon 2 - Teststep 1 + 2    X
+Canon 1 - Teststep 5          X
+Canon 2 - Teststep 3 + 4      X
+Canon 3 - Teststep 1 + 2      X
+Canon 1 - Teststep 6 + 7        X
+Canon 2 - Teststep 5            X
+Canon 3 - Teststep 3 + 4        X
+Canon 4 - Teststep 1 + 2        X
+Canon 1 - Teststep 8              X
+Canon 2 - Teststep 6 + 7          X
+Canon 3 - Teststep 5              X
+Canon 4 - Teststep 3 + 4          X
+Canon 5 - Teststep 1 + 2          X
+Canon 2 - Teststep 8                X
+Canon 3 - Teststep 6 + 7            X
+Canon 4 - Teststep 5                X
+Canon 5 - Teststep 3 + 4            X
+Canon 6 - Teststep 1 + 2            X
+Canon 3 - Teststep 8                  X
+Canon 4 - Teststep 6 + 7              X
+Canon 5 - Teststep 5                  X
+Canon 6 - Teststep 3 + 4              X
+Canon 7 - Teststep 1 + 2              X
+Canon 4 - Teststep 8                    X
+Canon 5 - Teststep 6 + 7                X
+Canon 6 - Teststep 5                    X
+Canon 7 - Teststep 3 + 4                X
+Canon 8 - Teststep 1 + 2                X
+Canon 5 - Teststep 8                      X
+Canon 6 - Teststep 6 + 7                  X
+Canon 7 - Teststep 5                      X
+Canon 8 - Teststep 3 + 4                  X
+Canon 9 - Teststep 1 + 2                  X
+
+========================  = = = = = = = = =
+
+How it fits all together
+------------------------
+
+In ``baangt`` we have test case status ``paused`` for conditions of longer asynchronous waiting times. Each test case has
+a unique identifier, that enables external callbacks or triggers to resume a certain test case after it was paused and
+the precondition for continuation was met.
+
+Prerequisites to run test canons in ``baangt``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* implement the triggers which will call ``baangt`` service "resumeTestCase" with the unique ID of a test case
+* baangtDB (onsite, in the cloud or serverless)
+

+ 161 - 0
docs/_build/html/_sources/articles/BugSoup.rst.txt

@@ -0,0 +1,161 @@
+Why On Earth Do We Have Bugs In Production?
+===========================================
+
+We all hate bugs in production. They're a pain for everybody. Devs, Management, Customers, Infrastructure. Given a
+big enough scale many departments can be heavily effected by a single bug. That costs dearly and can be avoided in most cases.
+
+In this article we'll look at real bugs, that managed to reach production and see, if proper testing could have avoided
+these bugs.
+
+#1 a lot of wrong shoes in wrong places
+---------------------------------------
+
+Task:
+^^^^^
+A new algorithm for a large shoe producer was built. The aim was to predict how many of which shoes will be sold in which
+areas, deliver from the central warehouse to regional distribution centers, optimize loading of trucks to dispatch pallets
+to local stores (e.g. load pallets for the last shop on the tour first into the truck).
+
+The result:
+^^^^^^^^^^^
+Let's put it like this: Chaos. Not like "Chaos! We've a record in the database missing". No, more like "Chaos: Trucks all
+over the place are carrying wrong shoes to the wrong stores. It will take months to sort this out". Chaos. Alone the cost
+for the truck loads being brought back, repacked, reshipped would have paid 10 more testers, let alone missed sales.
+
+What happened:
+^^^^^^^^^^^^^^
+The algorithm was developed based on old/incomplete data and old data structure. The testers worked on a small region
+and only with one model of shoes, as creating all the test data manually was time consuming and given the short time, they tested, how it would work in 1 shop.
+It worked well. In the algorithm itself only one ``clear`` was missing.
+
+How this could have been prevented:
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+With intelligent test automation testers could have created more sample data in less time (e.g. record 1 shoe model,
+then alter the parameters of the test case and automatically create a reasonable number of shoe models).
+
+#2 A sudden wealth
+------------------
+
+Task:
+^^^^^
+Company A buys company B. A quick win to reduce costs and merge applications is to let invoicing and cash flows run on
+Company A. 60k contracts. Monthly invoicing. What could go wrong?
+
+The result:
+^^^^^^^^^^^
+First, there were more bounced direct debits as in other months. Well, X-Mas time, people overspent for presents. All good, right?
+Well, no. A few days in after the "successful" first step of the merger, first level support showed an increased number of
+calls, mostly furious people, who were charged 10 to 100 times their usual monthly fee - often via direct debit and that
+during X-Mas time. If that's not a SUPER-GAU, then what is? News papers got tips and printed accordingly about the scandal,
+when a multinational corporation robs from working class people who now don't have any means to by presents for their kids. Great!
+"What could go wrong?" --> That!
+
+What happened:
+^^^^^^^^^^^^^^
+One date field mapped wrongly in the interface between the invoicing application and the contract application. ``BEGINNDATE``
+vs ``LASTPAYDATE``. The error was in there since the first test on final quality system. It was found and fixed in 10 minutes.
+
+Test data was complex to be created and proper data from production couldn't be copied (lots of reasons, GDPR was not one of them).
+Testers created contracts by themselves and created max backdated to beginning of the year. Then, in order to save the hussle of having to create too many new contracts manually,
+they started invoicing on a monthly basis, different than the batch job setting in production, which would take all open
+items and collect using the appropriate payment method.
+
+How could this have been prevented:
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Test data was too complex to be created. Unrealistic manually created test data is the worst. It gives you false security when in reality you're totally blind.
+
+
+#3 You don't pay - we tow your car!
+-----------------------------------
+
+Task:
+^^^^^
+In many million records of business partners find duplicates, move contracts from the duplicates to a main account,
+flag duplicates for deletion.
+
+    Simple, clean. In and out in 60 minutes.
+
+The result:
+^^^^^^^^^^^
+Cars were towed and unregistered. Collection agents doing their jobs but at people who actually paid their bills.
+
+What happened:
+^^^^^^^^^^^^^^
+
+All went well, the task was completed in record time, tested all combinations of possible partner data, all good. Wonderful!
+But. The task and the tests were done on the system, that deals with business partners. With every duplicate found in the
+partner system the contract system was informed about the new partner number, which replaces the old number on a specific
+contract. In collection system the payment went to the new partner number. Unfortunately the unsettled amounts were also
+cleared with the new number and the unsettled amount on the old partner number remained open forever. Thanks to the automatic
+dunning process including escalation cars were towed - as according to the system - these folks didn't pay their bills.
+
+How could this have been prevented:
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Honestly, that's a tough one, even if you have great test coverage and full scope E2E-Tests in place. Which normal company
+would go to the length of creating bank payment interface to see, that the unsettled amount wasn't cleared? Of course, a
+senior solution architect could have foreseen this outcome.
+
+#4 Material master records - what are they for anyway?
+------------------------------------------------------
+
+Task:
+^^^^^
+A table on Oracle SQL exploded because customer added too many fields into the table. Whatever. Other tables had also
+reached similar sizes, so transform those fields into key/value-pairs and store in a separate table with reference to the
+other tables. 10 tables, a few million records, easy going. 4 hours tops. A little testing on FQA, then run over the weekend
+in production.
+
+The outcome:
+^^^^^^^^^^^^
+
+Material master records are pretty important for a production company. Not as important as customers, but pretty important.
+After this job, they didn't have any (while 1000s of interface records from suppliers and customers were coming in). The fix
+was provided within a few hours from a coincidentally setup parallel system, but this could have gone very bad.
+
+What happened:
+^^^^^^^^^^^^^^
+
+Functionality was tested. Functionality worked fine (new table was filled with data and displayed and linked properly). Clearing
+of the data fields also worked perfectly, but was a bit overmotivated. Everything except the key field was cleared. One
+code line changed and it worked. There were practically no tests - because "What could go wrong on such a quick fix?".
+
+How could this have been prevented:
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Even the simplest functional test would have immediately thrown an error. All Unit-Tests were OK and for this customer
+there are (were) no functional tests.
+
+# What are these chemical elements anyway?
+------------------------------------------
+
+Task:
+^^^^^
+Upgrade a mass spectrometer to latest firmware. Come ooon, that's a job for a junior!
+
+The outcome:
+^^^^^^^^^^^^
+
+Just a few 100k bugs of wrongly melted raw material. Nobody harmed, no outside consequences (by chance only!).
+
+What happened:
+^^^^^^^^^^^^^^
+
+Before the update, the spectrometer had fixed decimal places in a number. After the update, decimal places were floating.
+The interface with the material robot, who'd add missing raw material into a boiling soup of metal based on the chemical analysis, was used to fixed decimal
+places and thus went wild on adding different components to compensate for each result of the mass spectrometer. Luckily
+after 30 hours of boiling the shift supervisor understood that something is wrong
+
+How could this have been prevented:
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+First it looks like it's an easy one, but it's not. A pure technical test would have not found that problem. If one would mock
+away the spectrometer in the first place, it would also not show up. The only way to find that, would have been to
+test the output of the spectrometer with a reference material against the output after the update. But that's nothing,
+that can be automated.
+
+Summary
+-------
+
+Most of the severe bugs described here could have been found easily, others not so easy. In any case, every bug that
+was found on lower stages and never reaches production is much cheaper for the whole organization, so get ready to use
+``baangt`` to increase test coverage and subsequently overall quality!

+ 23 - 0
docs/_build/html/_sources/articles/SeleniumGridV4WithBaangt.rst.txt

@@ -0,0 +1,23 @@
+Integration with Selenium Grid V4
+=================================
+
+`baangt <https://baangt.org>`_ has now integration with `Selenium Grid V4 <https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4>`_.
+
+Following the same logic as with integration of `Zalenium <https://github.com/zalando/zalenium>`_ and current
+version of `Selenium Grid <https://www.guru99.com/introduction-to-selenium-grid.html>`_ you can define your test cases
+and test data definitions in Microsoft Excel using simpleFormat, full Format or subclassed TestStepMaster.
+
+The only difference is setting the Browser to ``REMOTE_V4``. Of course you'll need to provide address and port of the
+service in ``BrowserAttributes``.
+
+Ready for your own tests
+------------------------
+
+Even if you don't have a shiny Selenium Grid V4 Cluster on your own, you can simulate it using our Docker image. Just
+download the `repository <https://gogs.earthsquad.global/athos/baangt-Docker-SeleniumGrid4>`_, e.g. by using ``git clone``.
+Once it's downloaded use ``make build`` and ``make run`` to build and run the container. ``vnc://localhost:5902`` will
+grant access to the Desktop inside the container.
+
+.. image:: ../vncDesktopSeleniumGridDocker.png
+    :target: https://gogs.earthsquad.global/athos/baangt-Docker-SeleniumGrid4
+

+ 2 - 2
docs/_build/html/_sources/articles/StopTesting.rst.txt

@@ -43,8 +43,8 @@ Realistic testdata combinations might also mean, that you have to create multipl
 test cases. Sometimes that's hard, because masterdata might be maintained on a remote master system and you might not
 have access to that. But it's so worth the trouble in the long run.
 
-FK The gold is on the street
-----------------------------
+It's raining soup - with bugs
+-----------------------------
 
 Once you're in production your bug tickets are an invaluable source of wisdom, on how to improve testing. Majority of the
 tickets will hopefully be about user errors, wrong passwords, unknown "Works as designed"-Situations, and things like that.

+ 24 - 0
docs/_build/html/_sources/changelog.rst.txt

@@ -1,6 +1,30 @@
 Change log
 ==========
 
+2020.03
+^^^^^^^
+Summary: Release Candiate 3 is on the road!
+
+New features
+++++++++++++
+* Network logging during WEB-Sessions and export to Excel-Result in separate tab. Use ``TC.NetworkInfo`` with value ``True`` (tested on Mac and Windows, most probably works on Linux too).
+* baangtDB: Import and Export functionality for simpleFormat and complex XLSX-Testrun definitions.
+* baangtDB: Export also to JSON-Format
+* baangtDB: cascaded delete: Delete a test run and all it's objects (unless used in other test runs)
+* baangtDB: Update testrun from XLSX (closed circuit between IT-Department and business department)
+* Docs updated with latest parameters
+* SimpleFormat: ``pause`` command added
+* SimpleFormat: ``address_creation`` command added to create a random address. Customizable.
+  Multiple calls will create multiple random addresses.
+* CLI: New parameter ``--reloadDrivers=True`` downloads latest version of webdrivers for Chrome and Firefox.
+
+Bugfixes
+++++++++
+* Reporting: Duration sometimes off by Timezone shift hours
+* Minor fixes for increased stability with Chrome-based browsers
+* Parallel executions on Windows work now, rewrote parallelism (local, without Selenium/Zalenium) completely to run with
+  less resources. 10 parallel Firefox sessions on a single MacBook with 16 GB RAM works.
+
 2020.02
 ^^^^^^^
 Summary: Web- and API-Tests XLSX-SimpleFormat are almost completed. Shouldn't take much longer to have a production ready version.

+ 100 - 0
docs/_build/html/_sources/docs/baangt-Plugin.rst.txt

@@ -0,0 +1,100 @@
+What is a baangt-plugin
+=======================
+
+Simply speaking, one baangt-plugin correspond to one class, and the
+methods in the class correspond to the implements in the plugin.
+
+how to make a baangt-plugin
+===========================
+
+first of all , we need to create a implement class, like this:
+
+::
+
+    import baangt
+
+    from baangt.base.Timing.Timing import Timing
+
+    class TimingHookImpl:
+        
+        @baangt.hook_impl
+        def timing_init(self):
+            return Timing()
+
+        @baangt.hook_impl
+        def timing_takeTime(self, timingObject, timingName, forceNew=False):
+            return timingObject.takeTime(timingName, forceNew)
+
+        @baangt.hook_impl
+        def timing_addAttribute(self, timingObject, attribute, value, timingSection=None):
+            return timingObject.addAttribute(attribute, value, timingSection)
+
+        @baangt.hook_impl
+        def timing_takeTimeSumOutput(self, timingObject):
+            return timingObject.takeTimeSumOutput()
+
+        @baangt.hook_impl
+        def timing_returnTime(self, timingObject):
+            return timingObject.returnTime()
+
+        @baangt.hook_impl
+        def timing_returnTimeSegment(self, timingObject, segment):
+            return timingObject.returnTimeSegment(segment)
+
+        @baangt.hook_impl
+        def timing_resetTime(self, timingObject):
+            return timingObject.resetTime()
+
+and then register this implement class in /baangt/\_*init\_*.py:
+
+::
+
+    from baangt.base.Timing.hookImpls import TimingHookImpl
+
+    plugin_manager.register(plugin=TimingHookImpl())
+
+how the baangt-plugin work
+==========================
+
+for example, after transfer TestRun to a plugin, we can replace the
+code:
+
+::
+
+    from xxx import TestRun
+    TestRun()
+
+by
+
+::
+
+    from xxx import plugin_manager
+    plugin_manager.hook.testRun_init()
+
+this replacement does not change anything of the result of programme's
+execution.
+
+how to replace the existing plugin by your own one
+==================================================
+
+for example, if you want to replace the default TestRun plugin,
+
+you can easily change the implement of TestRun by just unregister the
+default plugin and register your own one:
+
+::
+
+    plugin_manager.unregister(plugin=default_plugin)
+    plugin_manager.register(plugin=my_plugin)
+
+notice that if you don't unregister the old one, two same implements
+(with same function name) in two plugins may both execute if you call
+the function:
+
+::
+
+    plugin_manager.hook.i_got_two_implements()
+
+the order of the execution follows the FILO (first-in-last-out) rule.
+
+Author: Yuyi Shao

+ 2 - 2
docs/_build/html/_sources/docs/baangt.base.rst.txt

@@ -108,10 +108,10 @@ baangt.base.Timing module
    :undoc-members:
    :show-inheritance:
 
-baangt.base.utils module
+baangt.base.Utils module
 ------------------------
 
-.. automodule:: baangt.base.utils
+.. automodule:: baangt.base.Utils
    :members:
    :undoc-members:
    :show-inheritance:

+ 2 - 1
docs/_build/html/_sources/index.rst.txt

@@ -32,7 +32,8 @@ and well documented master functionality.
       Contributions <contributors.rst>
       Changelog <changelog.rst>
       Planned Features <PlannedFeatures.rst>
-   :subheader: Articles </articles/Articles.rst>
+      Browser Drivers <BrowserDrivers.rst>
+      :subheader: Articles </articles/Articles.rst>
       Web <http://www.baangt.org>
 
 

+ 63 - 29
docs/_build/html/_sources/simpleExample.rst.txt

@@ -1,7 +1,7 @@
 Jump-start into worry free production deployments
 =================================================
 
-You can try baangt right away and see, how it works. It'll take less then 5 minutes.
+You can try baangt right away and see how it works. It'll take less than 5 minutes.
 
 Prerequisits
 ^^^^^^^^^^^^^
@@ -10,8 +10,9 @@ Prerequisits
 * Python3 installed
 * ``baangt`` installed (either via PIP or from the GIT-Repository at https://gogs.earthsquad.global/athos/baangt)
 
-If you prefer running ``baangt`` inside Docker use the Dockerfile from https://gogs.earthsquad.global/athos/baangt-Docker.
-After downloading the repository enter ``make build`` and then ``make run`` in the command line. Once Docker is up, use SVN://localhost:5902 to connect. All features are exactly as you'd install everything on your local machine.
+If you prefer running ``baangt`` inside Docker, use the Dockerfile from https://gogs.earthsquad.global/athos/baangt-Docker.
+After downloading the repository, enter ``make build`` and then ``make run`` in the command line.
+Once Docker is up, use SVN://localhost:5902 to connect. All features are exactly like you'd install everything on your local machine.
 
 Let's dive right into it
 ^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -47,19 +48,19 @@ Follow these steps to modify the behaviour of the test script:
 
 .. hint::
 
-    If you want to be able to watch your browser executing each step we recommend you set the parameter ``slowExecution`` with value ``True`` in Globals and re-run the test
+    If you want to be able to watch your browser executing each step, we recommend you set the parameter ``slowExecution`` with value ``True`` in Globals and re-run the test
 
 .. hint ::
-    If you want the browser window to stay open on errors and/or after execution you can use parameter ``dontCloseBrowser`` with value ``True``
+    If you want the browser window to stay open on errors and/or after execution, you can use parameter ``dontCloseBrowser`` with value ``True``
     in global settings and run the test again. The browser will stop on errors or when the test run execution stopped.
 
 A bit further
 -------------
 
-Go ahead and try it out with your personal real-world example of a webpage, web-app or SPA, which you would like to have
+Go ahead and try it out with your personal real-world example of a web-page, web-app or SPA, which you would like to have
 reproducable regression tests for.
 
-Of course you could basically follow the steps above, but depending on the length and complexity of the execution you'll
+Of course you could basically follow the steps above, but depending on the length and complexity of the execution, you'll
 definitely enjoy having more tools in your toolbox:
 
 Recording a test case with Katalon Recorder
@@ -82,24 +83,24 @@ Katalon Recorder is a free browser Add-on for Chrome and Firefox. Installation i
 
   .. hint::
 
-     You might want to execute the test case from within Katalon Recorder so make sure everything was recorded proplery.
+     You might want to execute the test case from within Katalon Recorder to make sure everything was recorded properly.
 
 * Hit the export-Button of the recorder, chose format ``other``
 * Click "Export to Clipboard"
 * Switch over to ``baangt`` and press the button "Import KatalonRecorder"
-    * The contents from the clipboard should be imported already and translation to ``baangt`` should be completed. If not click on the button "Import Clipboard" and please drop a ticket stating your Operating System incl. Version and which Browser you used for Recording.
-* Press "Save" and choose where you want to store the resulting XLSX-File to
+    * The contents from the clipboard should be imported already and translation to ``baangt`` should be completed. If the clipboard was not inserted automatically, click on the button "Import Clipboard" and please drop a ticket stating your operating system incl. version and which browser you used for recording in Katalon recorder.
+* Press "Save" and choose where you want to store the resulting XLSX-File
 
 **That's it. You just created you first regression test case including all parameters for it.**
 
-If you're wondering, which parameters these are and how you can influence them, fear not! Open the Testcase-XLSX from
+If you're wondering which parameters these are, and how you can influence them, fear not! Open the Testcase-XLSX from
 the last step above, click on the "data"-Tab and start to enter values and lines as you please.
 
 You can always re-run Baangt after saving your Testrun-XLSX and see your progress.
 
 .. hint::
 
-    If you want to be able to watch your browser executing each step we recommend you set the parameter ``slowExecution`` with value ``True`` in Globals and re-run the test
+    If you want to be able to watch your browser executing each step, set the parameter ``slowExecution`` with value ``True`` in Globals and re-run the test
 
 Tweaking the result
 ^^^^^^^^^^^^^^^^^^^
@@ -113,15 +114,15 @@ You managed to have a working recording. Congratulations! Let's learn a bit more
    * - Column Name
      - Description
    * - ``Activtity``
-     - Set's the activity of this TestStep. Activities are desribed in more details in next chapter
+     - Sets the activity of this TestStep. Activities are described in more details in next chapter
    * - ``LocatorType``
-     - Most of the activities need a locator. We're big fans of XPATH as locatorType, due to speed and ease of use. Sooner
+     - Most of the activities need a locator. We are big fans of XPATH as locatorType, due to speed and ease of use. Sooner
        or later you'll anyway end up needing XPATH, so why not use it always when there's no downside? If you prefer
-       writing CSS-Paths then use value ``CSS`` for the locator. And if you're luck enough to have unique IDs in your
+       writing CSS-Paths then use value ``CSS`` for the locator. And if you are lucky enough to have unique IDs in your
        page simply use ``ID``.
    * - ``Locator``
-     - The locator is the specification, on which element ``Activity`` should happen. As in the value fields you may
-       use variable replacement here too in order to replace Locators with values from the data file, for instance the
+     - The locator is the specification on which element ``Activity`` should happen. As in the value fields, you may
+       use variable replacement here too, in order to replace Locators with values from the data file. For instance the
        following would work fine:
        ``//*[@id($(CUSTOMERNUMBER))]`` - this would create an XPATH-Statement where $(CUSTOMERNUMBER) is replaced by the
        actual value of the current test record.
@@ -135,10 +136,10 @@ You managed to have a working recording. Congratulations! Let's learn a bit more
        second field or value to compare to. Values for ``comparison`` are ``eq`` and ``=``. The field ``value2``
        follows the same logic as ``value``.
    * - ``Timeout``
-     - Sometimes you'll want to overwrite the default timeout settings of ``baangt``. Here's your chance. Values in seconds,
+     - Sometimes you might to overwrite the default timeout settings of ``baangt``. Here's your chance. Values in seconds,
        decimals are OK (``0.5`` is a valid value, so is ``90``).
    * - ``Optional``
-     - Usually, when ``baangt`` tries to execute an activity and can't (after timeout), it will throw an exception,
+     - Usually when ``baangt`` tries to execute an activity and can't (after timeout), it will throw an exception,
        report in the Logs and stop the current test case. If you set ``optional`` to ``True`` or ``X``, ``baangt``
        will continue execution of the test case, even if the activity wasn't possible.
    * - ``Release``
@@ -146,8 +147,8 @@ You managed to have a working recording. Congratulations! Let's learn a bit more
        Migration, Pre-Production, etc.) and the software version on each stage is different. A test case, that works on
        Pre-Production will not pass on Dev-System as Dev is already further developed. If you change the test case to work
        on Dev-System and you need to test a Hotfix deployment on Pre-Production, what will you do? In other test solutions
-       you would "simply" copy your test case, have one version for DEV, one for Pre-Production. Do that with 100s of
-       different test cases and watch yourselve drown in chaos. OR you could use ``baangt`` where this problem is solved.
+       you would "simply" copy your test case, have one version for DEV, one for Pre-Production. Do that with hundreds of
+       different test cases and watch yourself drown in chaos. OR you could use ``baangt`` where this problem is solved.
        Software moves through the stages of your system landscape as it evolves. Use this field to conditionally execute
        different "branches" of your test cases, depending on the version on the current stage. ``Release`` can be any
        string value. You can add "> " "< " and "= " as the first 2 characters to signal to ``baangt`` to only execute
@@ -157,7 +158,7 @@ You managed to have a working recording. Congratulations! Let's learn a bit more
 
          > 2019.05
 
-       will run the line onlf, if the Version is ``2019.05a`` or ``2019.06``. We are aware, that your version numbers might
+       will run the line only, if the Version is ``2019.05a`` or ``2019.06``. We are aware, that your version numbers might
        follow different nomenclature, so we made it very easy to subclass the corresponding logic.
 
 More details on Activities
@@ -171,6 +172,7 @@ More details on Activities
        * goBack
        * If
        * EndIf
+       * Pause
 
 .. list-table:: Details of activities
    :widths: 25 75
@@ -179,8 +181,8 @@ More details on Activities
    * - Activity
      - Description
    * - GoToURL
-     - Navigate to the given URL. Column ``Value`` must provide the URL. You may want to use variables in your URL-String,
-       for instance your URL might look like ``https://$(STAGE).earthsquad.global/``. ``$(STAGE)`` will be replaced
+     - Navigate to the given URL. Column ``Value`` must provide the URL. You might want to use variables in your URL-String,
+       for instance your URL might look like this ``https://$(STAGE).earthsquad.global/``. It will be replaced
        during runtime of the test data with the value of ``STAGE`` from either Global settings or settings in the
        ``testCaseSequence``.
    * - click
@@ -188,8 +190,8 @@ More details on Activities
    * - clickIF
      - Will click on the object specified by the locator IF the field in testDataDict, that you enter in Column ``value``
        has a value. This small and simple extension can save you hours and hours of work in maintenance of testcases.
-       Imagine you've 10 checkboxes, that in various combinations provide different test results and you have to test
-       all possible combinations. Using 1 column in your datafile for each checkbox and the ``clickif`` you can create
+       Imagine you have 10 checkboxes, that in various combinations provide different test results, and you have to test
+       all possible combinations. Using one column in your datafile for each checkbox and the ``clickif``, you can create
        your testCases in minutes instead of hours or days. Imagine 50 checkboxes - with ``baangt`` your effort is still
        just minutes.
    * - setText
@@ -203,12 +205,44 @@ More details on Activities
    * - goBack
      - Trigger the "back"-Button of the browser.
    * - If/Endif
-     - The block between IF and ENDIF is only executed, when the condition evaluated by ``value|comparator|value2`` is
-       is true, for instance:
+     - The block between IF and ENDIF is only executed when the condition evaluated by ``value|comparator|value2`` is
+       true, for instance:
 
             $(POSTCODE) = 7040
 
             $(YEAR2DATE) > $(YEARTOMONTH)
 
-       Another use of the If-Statement is with ``LocatorType`` and ``Locator`` and comparison. You'd use that, when you
+       Another use of the If-Statement is with ``LocatorType`` and ``Locator`` and comparison. This can be used when you
        want conditional execution of a larger block of statements depending on an element present or not present.
+
+   * - assert
+     - Will retrieve value of element specified by ``locator`` and compare with reference value from ``value``.
+      
+
+   * - pause
+     - Will pause for the number of secons in ``value``. Valid numbers are float, e.g. 2, 0.2, 0.1, 25
+   * - address_create
+     - provide an easy and easily extendable way to generate address data for a test case
+       The following fields variable are stored in testcaseDataDict:
+
+       CountryCode
+       PostalCode
+       CityName
+       StreetName
+       HouseNumber
+       AdditionalData1
+       AdditionalData2
+       
+       `value`  optional
+         Default field-value: {'HouseNumber': '6', 'AdditionalData1': 'Near MahavirChowk', 'AdditionalData2': 'Opposite St. Marish Church', 'StreetName': 'GoreGaon', 'CityName': 'Ambala', 'PostalCode': '160055', 'CountryCode': 'India'} 
+
+       These fields can be used as filter criteria in field value.
+       Example value= `{CountryCode:CY, PostlCode: 7}`. 
+
+
+       Resulted field-value :{'HouseNumber': '6', 'AdditionalData1': 'Near MahavirChowk', 'AdditionalData2': 'Opposite St. Marish Church', 'StreetName': 'GoreGaon', 'CityName': 'Ambala', 'PostalCode': '7', 'CountryCode': 'CY'}
+
+       `value2` optional
+       If a prefix was povided in field Value2, the fieldnames will be concatenated with this prefix,
+       e.g.if value2=`PremiumPayer_`, then the resulting field for CountryCode in testDataDict would become PremiumPayer_CountryCode.
+

+ 31 - 5
docs/_build/html/articles/AgileWorkflowIntegration.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Agile: Where does baangt fit in? &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Agile: Where does baangt fit in? &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -34,7 +34,9 @@
   <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
   <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
     <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" /> 
+    <link rel="search" title="Search" href="../search.html" />
+    <link rel="next" title="Why On Earth Do We Have Bugs In Production?" href="BugSoup.html" />
+    <link rel="prev" title="Stop testing software…" href="StopTesting.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -79,7 +81,7 @@
             
             
               <p class="caption"><span class="caption-text">Contents:</span></p>
-<ul>
+<ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../Installation.html">   Installation</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">   Overview</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">   First Steps</a></li>
@@ -93,7 +95,20 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
+<li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
+<li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#"> bAanGtILE</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#we-can-do-that-with-every-software-what-s-so-special-about-baangt">We can do that with every software, what’s so special about baangt?</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
 
@@ -140,6 +155,8 @@
     
       <li><a href="../index.html">Docs</a> &raquo;</li>
         
+          <li><a href="Articles.html">Not Exactly Documentation</a> &raquo;</li>
+        
       <li>Agile: Where does <code class="docutils literal notranslate"><span class="pre">baangt</span></code> fit in?</li>
     
     
@@ -161,7 +178,7 @@
             
   <div class="section" id="agile-where-does-baangt-fit-in">
 <h1>Agile: Where does <code class="docutils literal notranslate"><span class="pre">baangt</span></code> fit in?<a class="headerlink" href="#agile-where-does-baangt-fit-in" title="Permalink to this headline">¶</a></h1>
-<p><code class="docutils literal notranslate"><span class="pre">baangt</span></code> supports all you ever dreamed of - you can start right away with TDD, where you create Test-Cases before you
+<p><code class="docutils literal notranslate"><span class="pre">baangt</span></code> supports all your agile mindset ever dreamed of - you can start right away with TDD, where you create Test-Cases before you
 even write code (Just don’t forget to set the test case version number to a future version).</p>
 <p>Increment testing is the next logical consequence, where you’ll use your test cases defined in the previous step to verify
 results from the current sprint. Once run, optimized and stable you’ll want to keep the system at least at this good state,
@@ -198,6 +215,15 @@ organization be, when things start to move faster than they’re now (if you’r
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="BugSoup.html" class="btn btn-neutral float-right" title="Why On Earth Do We Have Bugs In Production?" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="StopTesting.html" class="btn btn-neutral float-left" title="Stop testing software…" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 

+ 29 - 5
docs/_build/html/articles/Articles.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Not Exactly Documentation &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Not Exactly Documentation &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -36,7 +36,7 @@
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="next" title="Why your production sucks and how to fix it" href="ProductionSucks.html" />
-    <link rel="prev" title="Future Features" href="../PlannedFeatures.html" /> 
+    <link rel="prev" title="Handling of Browser Drivers" href="../BrowserDrivers.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -95,12 +95,16 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">:subheader: Articles</a><ul>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">   :subheader: Articles</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
 <li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
 <li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
 <li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
 <li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
+<li class="toctree-l2"><a class="reference internal" href="SeleniumGridV4WithBaangt.html"> SeleniumGridV4</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
@@ -190,13 +194,33 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="StopTesting.html"> Stop testing!</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="StopTesting.html#how-to-improve-the-situation">How to improve the situation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="StopTesting.html#fk-the-gold-is-on-the-street">FK The gold is on the street</a></li>
+<li class="toctree-l2"><a class="reference internal" href="StopTesting.html#it-s-raining-soup-with-bugs">It’s raining soup - with bugs</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html#we-can-do-that-with-every-software-what-s-so-special-about-baangt">We can do that with every software, what’s so special about baangt?</a></li>
 </ul>
 </li>
+<li class="toctree-l1"><a class="reference internal" href="BugSoup.html"> BugSoup</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html#a-lot-of-wrong-shoes-in-wrong-places">#1 a lot of wrong shoes in wrong places</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html#a-sudden-wealth">#2 A sudden wealth</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html#you-don-t-pay-we-tow-your-car">#3 You don’t pay - we tow your car!</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html#material-master-records-what-are-they-for-anyway">#4 Material master records - what are they for anyway?</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html#what-are-these-chemical-elements-anyway"># What are these chemical elements anyway?</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html#summary">Summary</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html#abstract">Abstract</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html#isn-t-everything-asynchronous">Isn’t everything asynchronous?</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html#deep-dive-on-test-canons">Deep dive on test Canons</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html#how-it-fits-all-together">How it fits all together</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="SeleniumGridV4WithBaangt.html"> SeleniumGridV4</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="SeleniumGridV4WithBaangt.html#ready-for-your-own-tests">Ready for your own tests</a></li>
+</ul>
+</li>
 </ul>
 </div>
 </div>
@@ -212,7 +236,7 @@
         <a href="ProductionSucks.html" class="btn btn-neutral float-right" title="Why your production sucks and how to fix it" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
-        <a href="../PlannedFeatures.html" class="btn btn-neutral float-left" title="Future Features" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+        <a href="../BrowserDrivers.html" class="btn btn-neutral float-left" title="Handling of Browser Drivers" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
     </div>
   

+ 741 - 0
docs/_build/html/articles/AsynchronousAndCanonTests.html

@@ -0,0 +1,741 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Asynchronous vs. Canon tests &mdash; baangt 2020.3.0.rc4 documentation</title>
+  
+
+  
+  
+  
+  
+
+  
+  <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+        <script type="text/javascript" src="../_static/jquery.js"></script>
+        <script type="text/javascript" src="../_static/underscore.js"></script>
+        <script type="text/javascript" src="../_static/doctools.js"></script>
+        <script type="text/javascript" src="../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+
+    
+
+  
+  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    <link rel="index" title="Index" href="../genindex.html" />
+    <link rel="search" title="Search" href="../search.html" />
+    <link rel="prev" title="Why On Earth Do We Have Bugs In Production?" href="BugSoup.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> baangt
+          
+
+          
+          </a>
+
+          
+            
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../Installation.html">   Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">   Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">   First Steps</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Structure.html">   Structure</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../ParametersConfigFile.html">   Parameters</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../DataFile.html">   Data file</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../SimpleAPI.html">   First API Test</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../TestTypes.html">   Types of Tests</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Developer.html">   For Developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../HistoryAndReasons.html">   History</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
+<li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
+<li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#"> Canons, that are not DSLR nor music</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#abstract">Abstract</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#isn-t-everything-asynchronous">Isn’t everything asynchronous?</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#polling-vs-events">Polling vs. Events</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#deep-dive-on-test-canons">Deep dive on test Canons</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#how-does-it-apply-to-testing-processes">How does it apply to testing processes?</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#how-the-test-canon-works">How the test Canon works</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#how-it-fits-all-together">How it fits all together</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#prerequisites-to-run-test-canons-in-baangt">Prerequisites to run test canons in <code class="docutils literal notranslate"><span class="pre">baangt</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../index.html">baangt</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../index.html">Docs</a> &raquo;</li>
+        
+          <li><a href="Articles.html">Not Exactly Documentation</a> &raquo;</li>
+        
+      <li>Asynchronous vs. Canon tests</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../_sources/articles/AsynchronousAndCanonTests.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="asynchronous-vs-canon-tests">
+<h1>Asynchronous vs. Canon tests<a class="headerlink" href="#asynchronous-vs-canon-tests" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="abstract">
+<h2>Abstract<a class="headerlink" href="#abstract" title="Permalink to this headline">¶</a></h2>
+<p>Whenever you can’t grab the verification of your test assumption right away, you’re in an <strong>asynchronous</strong> scenario. When
+you have an End2End-Scenario where this happens in more than one steps, you could consider setting up a test Canon.
+Borrowed from music, a test canon will start with one test case until the halt condition is reached. Once the case can
+continue (e.g. because a trigger arrived), the canon will not only continue to run the first test case in it’s second
+step but also start a new initial sequence of the same test case.</p>
+</div>
+<hr class="docutils" />
+<div class="section" id="isn-t-everything-asynchronous">
+<h2>Isn’t everything asynchronous?<a class="headerlink" href="#isn-t-everything-asynchronous" title="Permalink to this headline">¶</a></h2>
+<p>By nature basically every test is asynchronous, because we always wait for a reaction of the System under test. In most
+cases, we’re talking about Microseconds up to a few seconds. You’ll not do anything special with waiting times up to
+a few seconds. As you run anyway 50 or 500 parallel sessions, it doesn’t really matter. But what if we need to wait
+for e.g. 10 Minutes, 30 Minutes, 8 hours? We shouldn’t waste resources (like CPU-Time and blocked processes) to wait for
+extended times.</p>
+<div class="section" id="polling-vs-events">
+<h3>Polling vs. Events<a class="headerlink" href="#polling-vs-events" title="Permalink to this headline">¶</a></h3>
+<p><strong>Polling</strong> means to have your currently active test case poll repeatedly for an event in a more or less fixed timely
+interval. That’s nice for smaller waiting periods and smaller installations. When you run with 500 parallel sessions and
+you query a service every 500 ms for a specific answer you may create a unrealistic load to that service. You also
+consume resources of your test environment, which are then not available for other tasks. For <code class="docutils literal notranslate"><span class="pre">baangt</span></code> we recommend
+to use polling for expected short waiting times (several seconds up to minutes) - but that’s not a hard rule. YMMV.</p>
+<p><strong>Events</strong> (aka Callbacks) are the opposite. Your test case pauses and doesn’t do anything until an external trigger
+appears. Of course callbacks are more difficult to implement as you not only need to query a service repeatedly, but first
+implement a callback service as well as the call to the callback service (even when it’s done via Kafka or Redis).</p>
+<p>These callbacks are additional components of your system landscape, that need to be developed, tested and maintained.</p>
+</div>
+</div>
+<div class="section" id="deep-dive-on-test-canons">
+<h2>Deep dive on test Canons<a class="headerlink" href="#deep-dive-on-test-canons" title="Permalink to this headline">¶</a></h2>
+<p>What is a test Canon? It is basically the same concept as a canon in music for a combination of asynchronously executed
+test steps over and over again in order to have one test result for each test step at any given time slice.</p>
+<blockquote>
+<div><p>From <a class="reference external" href="https://en.wikipedia.org/wiki/Canon_(music)">Wikipedia</a>:</p>
+<p>In music, a canon is a contrapuntal (counterpoint-based) compositional technique that employs a melody with <strong>one or</strong>
+<strong>more imitations</strong> of the melody played after a given duration (e.g., quarter rest, one measure, etc.).</p>
+</div></blockquote>
+<p>See the music canon in action on <a class="reference external" href="https://www.youtube.com/watch?v=S9MN2WeqFY8">Youtube</a></p>
+<div class="section" id="how-does-it-apply-to-testing-processes">
+<h3>How does it apply to testing processes?<a class="headerlink" href="#how-does-it-apply-to-testing-processes" title="Permalink to this headline">¶</a></h3>
+<p>Imagine the following (simplified) test case sequence (in combination with a mainframe or SAP-System):</p>
+<ol class="arabic simple">
+<li><p>Create material master data in Backend. Validate: Material available in online shop (asynchronous)</p></li>
+<li><p>Create sales order. Validate: Increased demand in material resource planning (batch)</p></li>
+<li><p>Create delivery and shipping. Validate: Reduced stock of materials (asynchronous)</p></li>
+<li><p>Create invoice. Validate: Invoice amount posted to A/R (batch)</p></li>
+<li><p>Create payment. Validate: Open item closed (batch)</p></li>
+<li><p>Create goods return. Validate: Special quality stock increased (asynchronous)</p></li>
+<li><p>Create credit note. Validate: Amount of credit note in A/P (batch)</p></li>
+<li><p>Create outgoing payment. Validate: Open item closed</p></li>
+</ol>
+<p>In this example there are 4 batch processes, that we need to wait for before we can tell, whether the whole E2E-Scenario
+works or not. Without any measures this means to wait for 5 days until we have a test result. Real use cases are not that simple and would
+take longer. Back in the days when there was a month of User acceptance test (UAT) this was fine. Now with always shorter
+release cycles you can’t survive without new approaches.</p>
+</div>
+<div class="section" id="how-the-test-canon-works">
+<h3>How the test Canon works<a class="headerlink" href="#how-the-test-canon-works" title="Permalink to this headline">¶</a></h3>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 73%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+<col style="width: 3%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Canons and</p></th>
+<th class="head"><p>D</p></th>
+<th class="head"><p>A</p></th>
+<th class="head"><p>Y</p></th>
+<th class="head"><p>S</p></th>
+<th class="head"><p>/</p></th>
+<th class="head"><p>E</p></th>
+<th class="head"><p>X</p></th>
+<th class="head"><p>E</p></th>
+<th class="head"><p>C</p></th>
+</tr>
+<tr class="row-even"><th class="head"><p>Teststeps</p></th>
+<th class="head"><p>1</p></th>
+<th class="head"><p>2</p></th>
+<th class="head"><p>3</p></th>
+<th class="head"><p>4</p></th>
+<th class="head"><p>5</p></th>
+<th class="head"><p>6</p></th>
+<th class="head"><p>7</p></th>
+<th class="head"><p>8</p></th>
+<th class="head"><p>9</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-odd"><td><p>Canon 1 - Teststep 1 + 2</p></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 1 - Teststep 3 + 4</p></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 2 - Teststep 1 + 2</p></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 1 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 2 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 3 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 1 - Teststep 6 + 7</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 2 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 3 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 4 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 1 - Teststep 8</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 2 - Teststep 6 + 7</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 3 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 4 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 5 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 2 - Teststep 8</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 3 - Teststep 6 + 7</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 4 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 5 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 6 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 3 - Teststep 8</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 4 - Teststep 6 + 7</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 5 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 6 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 7 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 4 - Teststep 8</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 5 - Teststep 6 + 7</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 6 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 7 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Canon 8 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 5 - Teststep 8</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+</tr>
+<tr class="row-even"><td><p>Canon 6 - Teststep 6 + 7</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 7 - Teststep 5</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+</tr>
+<tr class="row-even"><td><p>Canon 8 - Teststep 3 + 4</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+</tr>
+<tr class="row-odd"><td><p>Canon 9 - Teststep 1 + 2</p></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td><p>X</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" id="how-it-fits-all-together">
+<h2>How it fits all together<a class="headerlink" href="#how-it-fits-all-together" title="Permalink to this headline">¶</a></h2>
+<p>In <code class="docutils literal notranslate"><span class="pre">baangt</span></code> we have test case status <code class="docutils literal notranslate"><span class="pre">paused</span></code> for conditions of longer asynchronous waiting times. Each test case has
+a unique identifier, that enables external callbacks or triggers to resume a certain test case after it was paused and
+the precondition for continuation was met.</p>
+<div class="section" id="prerequisites-to-run-test-canons-in-baangt">
+<h3>Prerequisites to run test canons in <code class="docutils literal notranslate"><span class="pre">baangt</span></code><a class="headerlink" href="#prerequisites-to-run-test-canons-in-baangt" title="Permalink to this headline">¶</a></h3>
+<ul class="simple">
+<li><p>implement the triggers which will call <code class="docutils literal notranslate"><span class="pre">baangt</span></code> service “resumeTestCase” with the unique ID of a test case</p></li>
+<li><p>baangtDB (onsite, in the cloud or serverless)</p></li>
+</ul>
+</div>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+      
+        <a href="BugSoup.html" class="btn btn-neutral float-left" title="Why On Earth Do We Have Bugs In Production?" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2020, Bernhard Buhl
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>

+ 5 - 1
docs/_build/html/articles/BaangtIndustries.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt In Industries &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt In Industries &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -95,6 +95,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
 <li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
@@ -106,6 +107,9 @@
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>

+ 415 - 0
docs/_build/html/articles/BugSoup.html

@@ -0,0 +1,415 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Why On Earth Do We Have Bugs In Production? &mdash; baangt 2020.3.0.rc4 documentation</title>
+  
+
+  
+  
+  
+  
+
+  
+  <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+        <script type="text/javascript" src="../_static/jquery.js"></script>
+        <script type="text/javascript" src="../_static/underscore.js"></script>
+        <script type="text/javascript" src="../_static/doctools.js"></script>
+        <script type="text/javascript" src="../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+
+    
+
+  
+  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    <link rel="index" title="Index" href="../genindex.html" />
+    <link rel="search" title="Search" href="../search.html" />
+    <link rel="next" title="Asynchronous vs. Canon tests" href="AsynchronousAndCanonTests.html" />
+    <link rel="prev" title="Agile: Where does baangt fit in?" href="AgileWorkflowIntegration.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> baangt
+          
+
+          
+          </a>
+
+          
+            
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../Installation.html">   Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">   Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">   First Steps</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Structure.html">   Structure</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../ParametersConfigFile.html">   Parameters</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../DataFile.html">   Data file</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../SimpleAPI.html">   First API Test</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../TestTypes.html">   Types of Tests</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Developer.html">   For Developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../HistoryAndReasons.html">   History</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
+<li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
+<li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#"> BugSoup</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#a-lot-of-wrong-shoes-in-wrong-places">#1 a lot of wrong shoes in wrong places</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#task">Task:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#the-result">The result:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#what-happened">What happened:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#how-this-could-have-been-prevented">How this could have been prevented:</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#a-sudden-wealth">#2 A sudden wealth</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#id1">Task:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id2">The result:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id3">What happened:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#how-could-this-have-been-prevented">How could this have been prevented:</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#you-don-t-pay-we-tow-your-car">#3 You don’t pay - we tow your car!</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#id4">Task:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id5">The result:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id6">What happened:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id7">How could this have been prevented:</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#material-master-records-what-are-they-for-anyway">#4 Material master records - what are they for anyway?</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#id8">Task:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#the-outcome">The outcome:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id9">What happened:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id10">How could this have been prevented:</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#what-are-these-chemical-elements-anyway"># What are these chemical elements anyway?</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#id11">Task:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id12">The outcome:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id13">What happened:</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#id14">How could this have been prevented:</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#summary">Summary</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../index.html">baangt</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../index.html">Docs</a> &raquo;</li>
+        
+          <li><a href="Articles.html">Not Exactly Documentation</a> &raquo;</li>
+        
+      <li>Why On Earth Do We Have Bugs In Production?</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../_sources/articles/BugSoup.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="why-on-earth-do-we-have-bugs-in-production">
+<h1>Why On Earth Do We Have Bugs In Production?<a class="headerlink" href="#why-on-earth-do-we-have-bugs-in-production" title="Permalink to this headline">¶</a></h1>
+<p>We all hate bugs in production. They’re a pain for everybody. Devs, Management, Customers, Infrastructure. Given a
+big enough scale many departments can be heavily effected by a single bug. That costs dearly and can be avoided in most cases.</p>
+<p>In this article we’ll look at real bugs, that managed to reach production and see, if proper testing could have avoided
+these bugs.</p>
+<div class="section" id="a-lot-of-wrong-shoes-in-wrong-places">
+<h2>#1 a lot of wrong shoes in wrong places<a class="headerlink" href="#a-lot-of-wrong-shoes-in-wrong-places" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="task">
+<h3>Task:<a class="headerlink" href="#task" title="Permalink to this headline">¶</a></h3>
+<p>A new algorithm for a large shoe producer was built. The aim was to predict how many of which shoes will be sold in which
+areas, deliver from the central warehouse to regional distribution centers, optimize loading of trucks to dispatch pallets
+to local stores (e.g. load pallets for the last shop on the tour first into the truck).</p>
+</div>
+<div class="section" id="the-result">
+<h3>The result:<a class="headerlink" href="#the-result" title="Permalink to this headline">¶</a></h3>
+<p>Let’s put it like this: Chaos. Not like “Chaos! We’ve a record in the database missing”. No, more like “Chaos: Trucks all
+over the place are carrying wrong shoes to the wrong stores. It will take months to sort this out”. Chaos. Alone the cost
+for the truck loads being brought back, repacked, reshipped would have paid 10 more testers, let alone missed sales.</p>
+</div>
+<div class="section" id="what-happened">
+<h3>What happened:<a class="headerlink" href="#what-happened" title="Permalink to this headline">¶</a></h3>
+<p>The algorithm was developed based on old/incomplete data and old data structure. The testers worked on a small region
+and only with one model of shoes, as creating all the test data manually was time consuming and given the short time, they tested, how it would work in 1 shop.
+It worked well. In the algorithm itself only one <code class="docutils literal notranslate"><span class="pre">clear</span></code> was missing.</p>
+</div>
+<div class="section" id="how-this-could-have-been-prevented">
+<h3>How this could have been prevented:<a class="headerlink" href="#how-this-could-have-been-prevented" title="Permalink to this headline">¶</a></h3>
+<p>With intelligent test automation testers could have created more sample data in less time (e.g. record 1 shoe model,
+then alter the parameters of the test case and automatically create a reasonable number of shoe models).</p>
+</div>
+</div>
+<div class="section" id="a-sudden-wealth">
+<h2>#2 A sudden wealth<a class="headerlink" href="#a-sudden-wealth" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="id1">
+<h3>Task:<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
+<p>Company A buys company B. A quick win to reduce costs and merge applications is to let invoicing and cash flows run on
+Company A. 60k contracts. Monthly invoicing. What could go wrong?</p>
+</div>
+<div class="section" id="id2">
+<h3>The result:<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
+<p>First, there were more bounced direct debits as in other months. Well, X-Mas time, people overspent for presents. All good, right?
+Well, no. A few days in after the “successful” first step of the merger, first level support showed an increased number of
+calls, mostly furious people, who were charged 10 to 100 times their usual monthly fee - often via direct debit and that
+during X-Mas time. If that’s not a SUPER-GAU, then what is? News papers got tips and printed accordingly about the scandal,
+when a multinational corporation robs from working class people who now don’t have any means to by presents for their kids. Great!
+“What could go wrong?” –&gt; That!</p>
+</div>
+<div class="section" id="id3">
+<h3>What happened:<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
+<p>One date field mapped wrongly in the interface between the invoicing application and the contract application. <code class="docutils literal notranslate"><span class="pre">BEGINNDATE</span></code>
+vs <code class="docutils literal notranslate"><span class="pre">LASTPAYDATE</span></code>. The error was in there since the first test on final quality system. It was found and fixed in 10 minutes.</p>
+<p>Test data was complex to be created and proper data from production couldn’t be copied (lots of reasons, GDPR was not one of them).
+Testers created contracts by themselves and created max backdated to beginning of the year. Then, in order to save the hussle of having to create too many new contracts manually,
+they started invoicing on a monthly basis, different than the batch job setting in production, which would take all open
+items and collect using the appropriate payment method.</p>
+</div>
+<div class="section" id="how-could-this-have-been-prevented">
+<h3>How could this have been prevented:<a class="headerlink" href="#how-could-this-have-been-prevented" title="Permalink to this headline">¶</a></h3>
+<p>Test data was too complex to be created. Unrealistic manually created test data is the worst. It gives you false security when in reality you’re totally blind.</p>
+</div>
+</div>
+<div class="section" id="you-don-t-pay-we-tow-your-car">
+<h2>#3 You don’t pay - we tow your car!<a class="headerlink" href="#you-don-t-pay-we-tow-your-car" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="id4">
+<h3>Task:<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
+<p>In many million records of business partners find duplicates, move contracts from the duplicates to a main account,
+flag duplicates for deletion.</p>
+<blockquote>
+<div><p>Simple, clean. In and out in 60 minutes.</p>
+</div></blockquote>
+</div>
+<div class="section" id="id5">
+<h3>The result:<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3>
+<p>Cars were towed and unregistered. Collection agents doing their jobs but at people who actually paid their bills.</p>
+</div>
+<div class="section" id="id6">
+<h3>What happened:<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h3>
+<p>All went well, the task was completed in record time, tested all combinations of possible partner data, all good. Wonderful!
+But. The task and the tests were done on the system, that deals with business partners. With every duplicate found in the
+partner system the contract system was informed about the new partner number, which replaces the old number on a specific
+contract. In collection system the payment went to the new partner number. Unfortunately the unsettled amounts were also
+cleared with the new number and the unsettled amount on the old partner number remained open forever. Thanks to the automatic
+dunning process including escalation cars were towed - as according to the system - these folks didn’t pay their bills.</p>
+</div>
+<div class="section" id="id7">
+<h3>How could this have been prevented:<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h3>
+<p>Honestly, that’s a tough one, even if you have great test coverage and full scope E2E-Tests in place. Which normal company
+would go to the length of creating bank payment interface to see, that the unsettled amount wasn’t cleared? Of course, a
+senior solution architect could have foreseen this outcome.</p>
+</div>
+</div>
+<div class="section" id="material-master-records-what-are-they-for-anyway">
+<h2>#4 Material master records - what are they for anyway?<a class="headerlink" href="#material-master-records-what-are-they-for-anyway" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="id8">
+<h3>Task:<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
+<p>A table on Oracle SQL exploded because customer added too many fields into the table. Whatever. Other tables had also
+reached similar sizes, so transform those fields into key/value-pairs and store in a separate table with reference to the
+other tables. 10 tables, a few million records, easy going. 4 hours tops. A little testing on FQA, then run over the weekend
+in production.</p>
+</div>
+<div class="section" id="the-outcome">
+<h3>The outcome:<a class="headerlink" href="#the-outcome" title="Permalink to this headline">¶</a></h3>
+<p>Material master records are pretty important for a production company. Not as important as customers, but pretty important.
+After this job, they didn’t have any (while 1000s of interface records from suppliers and customers were coming in). The fix
+was provided within a few hours from a coincidentally setup parallel system, but this could have gone very bad.</p>
+</div>
+<div class="section" id="id9">
+<h3>What happened:<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h3>
+<p>Functionality was tested. Functionality worked fine (new table was filled with data and displayed and linked properly). Clearing
+of the data fields also worked perfectly, but was a bit overmotivated. Everything except the key field was cleared. One
+code line changed and it worked. There were practically no tests - because “What could go wrong on such a quick fix?”.</p>
+</div>
+<div class="section" id="id10">
+<h3>How could this have been prevented:<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
+<p>Even the simplest functional test would have immediately thrown an error. All Unit-Tests were OK and for this customer
+there are (were) no functional tests.</p>
+</div>
+</div>
+<div class="section" id="what-are-these-chemical-elements-anyway">
+<h2># What are these chemical elements anyway?<a class="headerlink" href="#what-are-these-chemical-elements-anyway" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="id11">
+<h3>Task:<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h3>
+<p>Upgrade a mass spectrometer to latest firmware. Come ooon, that’s a job for a junior!</p>
+</div>
+<div class="section" id="id12">
+<h3>The outcome:<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
+<p>Just a few 100k bugs of wrongly melted raw material. Nobody harmed, no outside consequences (by chance only!).</p>
+</div>
+<div class="section" id="id13">
+<h3>What happened:<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h3>
+<p>Before the update, the spectrometer had fixed decimal places in a number. After the update, decimal places were floating.
+The interface with the material robot, who’d add missing raw material into a boiling soup of metal based on the chemical analysis, was used to fixed decimal
+places and thus went wild on adding different components to compensate for each result of the mass spectrometer. Luckily
+after 30 hours of boiling the shift supervisor understood that something is wrong</p>
+</div>
+<div class="section" id="id14">
+<h3>How could this have been prevented:<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h3>
+<p>First it looks like it’s an easy one, but it’s not. A pure technical test would have not found that problem. If one would mock
+away the spectrometer in the first place, it would also not show up. The only way to find that, would have been to
+test the output of the spectrometer with a reference material against the output after the update. But that’s nothing,
+that can be automated.</p>
+</div>
+</div>
+<div class="section" id="summary">
+<h2>Summary<a class="headerlink" href="#summary" title="Permalink to this headline">¶</a></h2>
+<p>Most of the severe bugs described here could have been found easily, others not so easy. In any case, every bug that
+was found on lower stages and never reaches production is much cheaper for the whole organization, so get ready to use
+<code class="docutils literal notranslate"><span class="pre">baangt</span></code> to increase test coverage and subsequently overall quality!</p>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="AsynchronousAndCanonTests.html" class="btn btn-neutral float-right" title="Asynchronous vs. Canon tests" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="AgileWorkflowIntegration.html" class="btn btn-neutral float-left" title="Agile: Where does baangt fit in?" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2020, Bernhard Buhl
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>

+ 5 - 1
docs/_build/html/articles/DataDoctor.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Beware of data generators &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Beware of data generators &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -95,6 +95,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#"> Test data rulez</a><ul>
@@ -105,6 +106,9 @@
 </li>
 <li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
 <li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>

+ 5 - 1
docs/_build/html/articles/ProductionSucks.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Why your production sucks and how to fix it &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Why your production sucks and how to fix it &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -95,11 +95,15 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
 <li class="toctree-l2 current"><a class="current reference internal" href="#"> Production sucks</a></li>
 <li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
 <li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
 <li class="toctree-l2"><a class="reference internal" href="StopTesting.html"> Stop testing!</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>

+ 221 - 0
docs/_build/html/articles/SeleniumGridV4WithBaangt.html

@@ -0,0 +1,221 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Integration with Selenium Grid V4 &mdash; baangt 2020.3.0.rc4 documentation</title>
+  
+
+  
+  
+  
+  
+
+  
+  <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+        <script type="text/javascript" src="../_static/jquery.js"></script>
+        <script type="text/javascript" src="../_static/underscore.js"></script>
+        <script type="text/javascript" src="../_static/doctools.js"></script>
+        <script type="text/javascript" src="../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+
+    
+
+  
+  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    <link rel="index" title="Index" href="../genindex.html" />
+    <link rel="search" title="Search" href="../search.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> baangt
+          
+
+          
+          </a>
+
+          
+            
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../Installation.html">   Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">   Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">   First Steps</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Structure.html">   Structure</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../ParametersConfigFile.html">   Parameters</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../DataFile.html">   Data file</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../SimpleAPI.html">   First API Test</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../TestTypes.html">   Types of Tests</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Developer.html">   For Developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../HistoryAndReasons.html">   History</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../index.html">baangt</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../index.html">Docs</a> &raquo;</li>
+        
+      <li>Integration with Selenium Grid V4</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../_sources/articles/SeleniumGridV4WithBaangt.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="integration-with-selenium-grid-v4">
+<h1>Integration with Selenium Grid V4<a class="headerlink" href="#integration-with-selenium-grid-v4" title="Permalink to this headline">¶</a></h1>
+<p><a class="reference external" href="https://baangt.org">baangt</a> has now integration with <a class="reference external" href="https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4">Selenium Grid V4</a>.</p>
+<p>Following the same logic as with integration of <a class="reference external" href="https://github.com/zalando/zalenium">Zalenium</a> and current
+version of <a class="reference external" href="https://www.guru99.com/introduction-to-selenium-grid.html">Selenium Grid</a> you can define your test cases
+and test data definitions in Microsoft Excel using simpleFormat, full Format or subclassed TestStepMaster.</p>
+<p>The only difference is setting the Browser to <code class="docutils literal notranslate"><span class="pre">REMOTE_V4</span></code>. Of course you’ll need to provide address and port of the
+service in <code class="docutils literal notranslate"><span class="pre">BrowserAttributes</span></code>.</p>
+<div class="section" id="ready-for-your-own-tests">
+<h2>Ready for your own tests<a class="headerlink" href="#ready-for-your-own-tests" title="Permalink to this headline">¶</a></h2>
+<p>Even if you don’t have a shiny Selenium Grid V4 Cluster on your own, you can simulate it using our Docker image. Just
+download the <a class="reference external" href="https://gogs.earthsquad.global/athos/baangt-Docker-SeleniumGrid4">repository</a>, e.g. by using <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clone</span></code>.
+Once it’s downloaded use <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">build</span></code> and <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code> to build and run the container. <code class="docutils literal notranslate"><span class="pre">vnc://localhost:5902</span></code> will
+grant access to the Desktop inside the container.</p>
+<a class="reference external image-reference" href="https://gogs.earthsquad.global/athos/baangt-Docker-SeleniumGrid4"><img alt="../_images/vncDesktopSeleniumGridDocker.png" src="../_images/vncDesktopSeleniumGridDocker.png" /></a>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2020, Bernhard Buhl
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>

+ 11 - 4
docs/_build/html/articles/StopTesting.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Stop testing software… &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Stop testing software… &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -35,6 +35,7 @@
   <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
+    <link rel="next" title="Agile: Where does baangt fit in?" href="AgileWorkflowIntegration.html" />
     <link rel="prev" title="baangt In Industries" href="BaangtIndustries.html" /> 
 </head>
 
@@ -94,15 +95,19 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="Articles.html">:subheader: Articles</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="ProductionSucks.html"> Production sucks</a></li>
 <li class="toctree-l2"><a class="reference internal" href="DataDoctor.html"> Test data rulez</a></li>
 <li class="toctree-l2"><a class="reference internal" href="BaangtIndustries.html"> Industries 4 baangt</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#"> Stop testing!</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#how-to-improve-the-situation">How to improve the situation</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#fk-the-gold-is-on-the-street">FK The gold is on the street</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#it-s-raining-soup-with-bugs">It’s raining soup - with bugs</a></li>
 </ul>
 </li>
+<li class="toctree-l2"><a class="reference internal" href="AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
@@ -207,8 +212,8 @@ had 10.000s of materials. Don’t be like our past. Be better.</p>
 test cases. Sometimes that’s hard, because masterdata might be maintained on a remote master system and you might not
 have access to that. But it’s so worth the trouble in the long run.</p>
 </div>
-<div class="section" id="fk-the-gold-is-on-the-street">
-<h2>FK The gold is on the street<a class="headerlink" href="#fk-the-gold-is-on-the-street" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="it-s-raining-soup-with-bugs">
+<h2>It’s raining soup - with bugs<a class="headerlink" href="#it-s-raining-soup-with-bugs" title="Permalink to this headline">¶</a></h2>
 <p>Once you’re in production your bug tickets are an invaluable source of wisdom, on how to improve testing. Majority of the
 tickets will hopefully be about user errors, wrong passwords, unknown “Works as designed”-Situations, and things like that.</p>
 <p>The remaining tickets are the gold. Dig them up (usually we’d have a JIRA-Filter and a classification in the defects),
@@ -229,6 +234,8 @@ day by day and week by week you’ll catch more problems in previous stages and
   
     <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
       
+        <a href="AgileWorkflowIntegration.html" class="btn btn-neutral float-right" title="Agile: Where does baangt fit in?" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
       
         <a href="BaangtIndustries.html" class="btn btn-neutral float-left" title="baangt In Industries" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       

File diff suppressed because it is too large
+ 40 - 6
docs/_build/html/changelog.html


+ 2 - 1
docs/_build/html/contributors.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Contributions &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Contributions &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -100,6 +100,7 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 288 - 0
docs/_build/html/docs/baangt-Plugin.html

@@ -0,0 +1,288 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>What is a baangt-plugin &mdash; baangt 2020.3.0.rc4 documentation</title>
+  
+
+  
+  
+  
+  
+
+  
+  <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+        <script type="text/javascript" src="../_static/jquery.js"></script>
+        <script type="text/javascript" src="../_static/underscore.js"></script>
+        <script type="text/javascript" src="../_static/doctools.js"></script>
+        <script type="text/javascript" src="../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+
+    
+
+  
+  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    <link rel="index" title="Index" href="../genindex.html" />
+    <link rel="search" title="Search" href="../search.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> baangt
+          
+
+          
+          </a>
+
+          
+            
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../Installation.html">   Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">   Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">   First Steps</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Structure.html">   Structure</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../ParametersConfigFile.html">   Parameters</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../DataFile.html">   Data file</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../SimpleAPI.html">   First API Test</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../TestTypes.html">   Types of Tests</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Developer.html">   For Developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../HistoryAndReasons.html">   History</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../index.html">baangt</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../index.html">Docs</a> &raquo;</li>
+        
+      <li>What is a baangt-plugin</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../_sources/docs/baangt-Plugin.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="what-is-a-baangt-plugin">
+<h1>What is a baangt-plugin<a class="headerlink" href="#what-is-a-baangt-plugin" title="Permalink to this headline">¶</a></h1>
+<p>Simply speaking, one baangt-plugin correspond to one class, and the
+methods in the class correspond to the implements in the plugin.</p>
+</div>
+<div class="section" id="how-to-make-a-baangt-plugin">
+<h1>how to make a baangt-plugin<a class="headerlink" href="#how-to-make-a-baangt-plugin" title="Permalink to this headline">¶</a></h1>
+<p>first of all , we need to create a implement class, like this:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">baangt</span>
+
+<span class="kn">from</span> <span class="nn">baangt.base.Timing.Timing</span> <span class="kn">import</span> <span class="n">Timing</span>
+
+<span class="k">class</span> <span class="nc">TimingHookImpl</span><span class="p">:</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">Timing</span><span class="p">()</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_takeTime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timingObject</span><span class="p">,</span> <span class="n">timingName</span><span class="p">,</span> <span class="n">forceNew</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timingObject</span><span class="o">.</span><span class="n">takeTime</span><span class="p">(</span><span class="n">timingName</span><span class="p">,</span> <span class="n">forceNew</span><span class="p">)</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_addAttribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timingObject</span><span class="p">,</span> <span class="n">attribute</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">timingSection</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timingObject</span><span class="o">.</span><span class="n">addAttribute</span><span class="p">(</span><span class="n">attribute</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">timingSection</span><span class="p">)</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_takeTimeSumOutput</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timingObject</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timingObject</span><span class="o">.</span><span class="n">takeTimeSumOutput</span><span class="p">()</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_returnTime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timingObject</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timingObject</span><span class="o">.</span><span class="n">returnTime</span><span class="p">()</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_returnTimeSegment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timingObject</span><span class="p">,</span> <span class="n">segment</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timingObject</span><span class="o">.</span><span class="n">returnTimeSegment</span><span class="p">(</span><span class="n">segment</span><span class="p">)</span>
+
+    <span class="nd">@baangt</span><span class="o">.</span><span class="n">hook_impl</span>
+    <span class="k">def</span> <span class="nf">timing_resetTime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timingObject</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timingObject</span><span class="o">.</span><span class="n">resetTime</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>and then register this implement class in /baangt/_*init_*.py:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">baangt.base.Timing.hookImpls</span> <span class="kn">import</span> <span class="n">TimingHookImpl</span>
+
+<span class="n">plugin_manager</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">plugin</span><span class="o">=</span><span class="n">TimingHookImpl</span><span class="p">())</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="how-the-baangt-plugin-work">
+<h1>how the baangt-plugin work<a class="headerlink" href="#how-the-baangt-plugin-work" title="Permalink to this headline">¶</a></h1>
+<p>for example, after transfer TestRun to a plugin, we can replace the
+code:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xxx</span> <span class="kn">import</span> <span class="n">TestRun</span>
+<span class="n">TestRun</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>by</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xxx</span> <span class="kn">import</span> <span class="n">plugin_manager</span>
+<span class="n">plugin_manager</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">testRun_init</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>this replacement does not change anything of the result of programme’s
+execution.</p>
+</div>
+<div class="section" id="how-to-replace-the-existing-plugin-by-your-own-one">
+<h1>how to replace the existing plugin by your own one<a class="headerlink" href="#how-to-replace-the-existing-plugin-by-your-own-one" title="Permalink to this headline">¶</a></h1>
+<p>for example, if you want to replace the default TestRun plugin,</p>
+<p>you can easily change the implement of TestRun by just unregister the
+default plugin and register your own one:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">plugin_manager</span><span class="o">.</span><span class="n">unregister</span><span class="p">(</span><span class="n">plugin</span><span class="o">=</span><span class="n">default_plugin</span><span class="p">)</span>
+<span class="n">plugin_manager</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">plugin</span><span class="o">=</span><span class="n">my_plugin</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>notice that if you don’t unregister the old one, two same implements
+(with same function name) in two plugins may both execute if you call
+the function:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">plugin_manager</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">i_got_two_implements</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>the order of the execution follows the FILO (first-in-last-out) rule.</p>
+<p>Author: Yuyi Shao</p>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2020, Bernhard Buhl
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>

+ 2 - 1
docs/_build/html/docs/baangt.TestCase.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt.TestCase package &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt.TestCase package &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

File diff suppressed because it is too large
+ 4 - 3
docs/_build/html/docs/baangt.TestCaseSequence.html


+ 2 - 1
docs/_build/html/docs/baangt.TestSteps.DropsApp.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt.TestSteps.DropsApp package &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt.TestSteps.DropsApp package &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 2 - 1
docs/_build/html/docs/baangt.TestSteps.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt.TestSteps package &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt.TestSteps package &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 52 - 3
docs/_build/html/docs/baangt.base.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt.base package &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt.base package &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -489,8 +490,56 @@ XLSX and JSON Config files.</p>
 <div class="section" id="module-baangt.base.Timing">
 <span id="baangt-base-timing-module"></span><h2>baangt.base.Timing module<a class="headerlink" href="#module-baangt.base.Timing" title="Permalink to this headline">¶</a></h2>
 </div>
-<div class="section" id="baangt-base-utils-module">
-<h2>baangt.base.utils module<a class="headerlink" href="#baangt-base-utils-module" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="module-baangt.base.Utils">
+<span id="baangt-base-utils-module"></span><h2>baangt.base.Utils module<a class="headerlink" href="#module-baangt.base.Utils" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="baangt.base.Utils.utils">
+<em class="property">class </em><code class="sig-prename descclassname">baangt.base.Utils.</code><code class="sig-name descname">utils</code><a class="headerlink" href="#baangt.base.Utils.utils" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="method">
+<dt id="baangt.base.Utils.utils.datetime_return">
+<em class="property">static </em><code class="sig-name descname">datetime_return</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.datetime_return" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="baangt.base.Utils.utils.extractFileNameFromFullPath">
+<em class="property">static </em><code class="sig-name descname">extractFileNameFromFullPath</code><span class="sig-paren">(</span><em class="sig-param">fileAndPathName</em><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.extractFileNameFromFullPath" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="baangt.base.Utils.utils.findFileAndPathFromPath">
+<em class="property">static </em><code class="sig-name descname">findFileAndPathFromPath</code><span class="sig-paren">(</span><em class="sig-param">fileNameAndPath</em>, <em class="sig-param">basePath=None</em><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.findFileAndPathFromPath" title="Permalink to this definition">¶</a></dt>
+<dd><p>Tries different approaches to locate a file
+lBasePath = the Path where the script is run</p>
+<p>&#64;param fileNameAndPath: Filename and potentially relative path
+&#64;param basePath (optional): Optional basePath to look at
+&#64;return:</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="baangt.base.Utils.utils.openJson">
+<em class="property">static </em><code class="sig-name descname">openJson</code><span class="sig-paren">(</span><em class="sig-param">fileNameAndPath</em><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.openJson" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="baangt.base.Utils.utils.replaceAllGlobalConstantsInDict">
+<em class="property">static </em><code class="sig-name descname">replaceAllGlobalConstantsInDict</code><span class="sig-paren">(</span><em class="sig-param">lDict: dict</em><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.replaceAllGlobalConstantsInDict" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="baangt.base.Utils.utils.replaceFieldValueWithValueOfConstant">
+<em class="property">static </em><code class="sig-name descname">replaceFieldValueWithValueOfConstant</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.replaceFieldValueWithValueOfConstant" title="Permalink to this definition">¶</a></dt>
+<dd><p>If a String reference to global Constant (e.g. GC.BROWSER_FF) is
+given, this function will replace it with the actual value (e.g. FIREFOX)</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="baangt.base.Utils.utils.sanitizeFileName">
+<em class="property">static </em><code class="sig-name descname">sanitizeFileName</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#baangt.base.Utils.utils.sanitizeFileName" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
 </div>
 <div class="section" id="module-baangt.base">
 <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-baangt.base" title="Permalink to this headline">¶</a></h2>

+ 2 - 1
docs/_build/html/docs/baangt.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt module &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt module &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 17 - 8
docs/_build/html/docs/baangt.katalonImporter.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt.katalonImporter package &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt.katalonImporter package &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -80,13 +80,22 @@
             
               <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">What is <code class="docutils literal notranslate"><span class="pre">baangt</span></code></a></li>
-<li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">Jump-start into worry free production deployments</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../Structure.html">Structure of baangt</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../ParametersConfigFile.html">Parameters in Configuration files (<code class="docutils literal notranslate"><span class="pre">globals</span></code>)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../TestTypes.html">Types of tests</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../Developer.html">Developer guidelines for custom enhancements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../HistoryAndReasons.html">Why <code class="docutils literal notranslate"><span class="pre">baangt</span></code> and why is it open source?</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Installation.html">   Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../OverviewUsage.html">   Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../simpleExample.html">   First Steps</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Structure.html">   Structure</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../ParametersConfigFile.html">   Parameters</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../DataFile.html">   Data file</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../SimpleAPI.html">   First API Test</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../TestTypes.html">   Types of Tests</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../Developer.html">   For Developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../HistoryAndReasons.html">   History</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
 
             

+ 2 - 1
docs/_build/html/docs/baangt.ui.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt.ui package &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt.ui package &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 2 - 1
docs/_build/html/docs/baangtIA.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangtIA module &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangtIA module &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 2 - 1
docs/_build/html/docs/modules.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>baangt &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>baangt &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 2 - 1
docs/_build/html/docs/setup.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>setup module &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>setup module &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -93,6 +93,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>

+ 31 - 10
docs/_build/html/genindex.html

@@ -9,7 +9,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Index &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Index &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -94,7 +94,8 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
-<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">   :subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
 
@@ -241,10 +242,12 @@
 </li>
       <li><a href="docs/baangt.base.html#module-baangt.base.Timing">baangt.base.Timing (module)</a>
 </li>
-      <li><a href="docs/baangt.katalonImporter.html#module-baangt.katalonImporter">baangt.katalonImporter (module)</a>
+      <li><a href="docs/baangt.base.html#module-baangt.base.Utils">baangt.base.Utils (module)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="docs/baangt.katalonImporter.html#module-baangt.katalonImporter">baangt.katalonImporter (module)</a>
+</li>
       <li><a href="docs/baangt.katalonImporter.html#module-baangt.katalonImporter.katalonImport">baangt.katalonImporter.katalonImport (module)</a>
 </li>
       <li><a href="docs/baangt.TestCase.html#module-baangt.TestCase">baangt.TestCase (module)</a>
@@ -321,6 +324,8 @@
 <h2 id="D">D</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.datetime_return">datetime_return() (baangt.base.Utils.utils static method)</a>
+</li>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.TestCases.decodeHex">decodeHex() (baangt.katalonImporter.katalonImport.TestCases static method)</a>
 </li>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.doImport">doImport() (in module baangt.katalonImporter.katalonImport)</a>
@@ -329,10 +334,10 @@
 </li>
       <li><a href="docs/baangt.TestSteps.html#baangt.TestSteps.TestStepMaster.TestStepMaster.doSaveData">doSaveData() (baangt.TestSteps.TestStepMaster.TestStepMaster method)</a>
 </li>
-      <li><a href="docs/baangt.ui.html#baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder.doTranslate">doTranslate() (baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder method)</a>
-</li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="docs/baangt.ui.html#baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder.doTranslate">doTranslate() (baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder method)</a>
+</li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder.doTranslateClick">doTranslateClick() (baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder static method)</a>
 </li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder.doTranslategoBackAndWait">doTranslategoBackAndWait() (baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder static method)</a>
@@ -359,10 +364,10 @@
         <li><a href="docs/baangt.TestSteps.html#baangt.TestSteps.TestStepMaster.TestStepMaster.execute">(baangt.TestSteps.TestStepMaster.TestStepMaster method)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.TestCaseSequence.html#baangt.TestCaseSequence.TestCaseSequenceMaster.TestCaseSequenceMaster.execute_parallel">execute_parallel() (baangt.TestCaseSequence.TestCaseSequenceMaster.TestCaseSequenceMaster method)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.TestSteps.html#baangt.TestSteps.TestStepMaster.TestStepMaster.executeDirect">executeDirect() (baangt.TestSteps.TestStepMaster.TestStepMaster method)</a>
 </li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder.exportResult">exportResult() (baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder method)</a>
@@ -371,6 +376,8 @@
 </li>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.LocatorObjects.exportXLS">exportXLS() (baangt.katalonImporter.katalonImport.LocatorObjects method)</a>
 </li>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.extractFileNameFromFullPath">extractFileNameFromFullPath() (baangt.base.Utils.utils static method)</a>
+</li>
   </ul></td>
 </tr></table>
 
@@ -379,9 +386,11 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.fileHandling">fileHandling (class in baangt.katalonImporter.katalonImport)</a>
 </li>
+      <li><a href="docs/baangt.base.html#baangt.base.TestRunDatabaseCreate.TestRunDatabaseFill.fill">fill() (baangt.base.TestRunDatabaseCreate.TestRunDatabaseFill method)</a>
+</li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="docs/baangt.base.html#baangt.base.TestRunDatabaseCreate.TestRunDatabaseFill.fill">fill() (baangt.base.TestRunDatabaseCreate.TestRunDatabaseFill method)</a>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.findFileAndPathFromPath">findFileAndPathFromPath() (baangt.base.Utils.utils static method)</a>
 </li>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.translateTestCase.findGroovyScript">findGroovyScript() (baangt.katalonImporter.katalonImport.translateTestCase method)</a>
 </li>
@@ -485,6 +494,8 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.TestCaseSequence.html#baangt.TestCaseSequence.TestCaseSequenceParallel.TestCaseSequenceParallel.one_sequence">one_sequence() (baangt.TestCaseSequence.TestCaseSequenceParallel.TestCaseSequenceParallel method)</a>
 </li>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.openJson">openJson() (baangt.base.Utils.utils static method)</a>
+</li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.translateObjectDefinition.outputAnalysis">outputAnalysis() (baangt.katalonImporter.katalonImport.translateObjectDefinition method)</a>
@@ -531,10 +542,16 @@
 </li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ui.UI.reopenWindow">reopenWindow() (baangt.ui.ui.UI method)</a>
 </li>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.replaceAllGlobalConstantsInDict">replaceAllGlobalConstantsInDict() (baangt.base.Utils.utils static method)</a>
+</li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.base.html#baangt.base.TestRunExcelImporter.TestRunExcelImporter.replaceFieldValueWithValueOfConstant">replaceFieldValueWithValueOfConstant() (baangt.base.TestRunExcelImporter.TestRunExcelImporter method)</a>
+
+      <ul>
+        <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.replaceFieldValueWithValueOfConstant">(baangt.base.Utils.utils static method)</a>
 </li>
+      </ul></li>
       <li><a href="docs/baangt.base.html#baangt.base.TestRunUtils.TestRunUtils.replaceGlobals">replaceGlobals() (baangt.base.TestRunUtils.TestRunUtils method)</a>
 </li>
       <li><a href="docs/baangt.katalonImporter.html#baangt.katalonImporter.katalonImport.translateGoovy.replaceGroovyLine">replaceGroovyLine() (baangt.katalonImporter.katalonImport.translateGoovy static method)</a>
@@ -555,6 +572,8 @@
 <h2 id="S">S</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils.sanitizeFileName">sanitizeFileName() (baangt.base.Utils.utils static method)</a>
+</li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ui.UI.saveConfigFileProcedure">saveConfigFileProcedure() (baangt.ui.ui.UI method)</a>
 </li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ui.UI.saveContentsOfConfigFile">saveContentsOfConfigFile() (baangt.ui.ui.UI method)</a>
@@ -571,10 +590,10 @@
 </li>
       <li><a href="docs/baangt.ui.html#baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder.saveTestData">saveTestData() (baangt.ui.ImportKatalonRecorder.ImportKatalonRecorder method)</a>
 </li>
-      <li><a href="docs/baangt.base.html#baangt.base.ApiHandling.ApiHandling.setBaseURL">setBaseURL() (baangt.base.ApiHandling.ApiHandling method)</a>
-</li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="docs/baangt.base.html#baangt.base.ApiHandling.ApiHandling.setBaseURL">setBaseURL() (baangt.base.ApiHandling.ApiHandling method)</a>
+</li>
       <li><a href="docs/baangt.base.html#baangt.base.TestRunUtils.TestRunUtils.setCompleteTestRunAttributes">setCompleteTestRunAttributes() (baangt.base.TestRunUtils.TestRunUtils method)</a>
 </li>
       <li><a href="docs/baangt.base.html#baangt.base.ApiHandling.ApiHandling.setEndPoint">setEndPoint() (baangt.base.ApiHandling.ApiHandling method)</a>
@@ -651,6 +670,8 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="docs/baangt.base.html#baangt.base.HandleDatabase.HandleDatabase.updateGlobals">updateGlobals() (baangt.base.HandleDatabase.HandleDatabase method)</a>
 </li>
+      <li><a href="docs/baangt.base.html#baangt.base.Utils.utils">utils (class in baangt.base.Utils)</a>
+</li>
   </ul></td>
 </tr></table>
 

+ 17 - 6
docs/_build/html/index.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Welcome to baangt! &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Welcome to baangt! &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -94,7 +94,8 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
-<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">   :subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
 
@@ -177,7 +178,7 @@ and well documented master functionality.</p>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="OverviewUsage.html">   Overview</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="OverviewUsage.html#the-fastest-simplest-way-to-record-test-cases">The fastest, simplest way to record test cases</a></li>
-<li class="toctree-l2"><a class="reference internal" href="OverviewUsage.html#still-simple-and-more-powerful-ways">Still simple and more powerful ways:</a></li>
+<li class="toctree-l2"><a class="reference internal" href="OverviewUsage.html#more-powerful-and-still-ways">More powerful and still ways:</a></li>
 <li class="toctree-l2"><a class="reference internal" href="OverviewUsage.html#subclassing-for-multiply-used-functionality">Subclassing for multiply used functionality</a></li>
 <li class="toctree-l2"><a class="reference internal" href="OverviewUsage.html#baangtdb-for-flexible-powerful-enterprise-grade-test-automation"><code class="docutils literal notranslate"><span class="pre">BaangtDB</span></code> for flexible, powerful enterprise grade test automation</a></li>
 <li class="toctree-l2"><a class="reference internal" href="OverviewUsage.html#to-sum-it-up">To sum it up</a></li>
@@ -219,6 +220,7 @@ and well documented master functionality.</p>
 <li class="toctree-l2"><a class="reference internal" href="Developer.html#subclassing">Subclassing</a></li>
 <li class="toctree-l2"><a class="reference internal" href="Developer.html#debugging">Debugging</a></li>
 <li class="toctree-l2"><a class="reference internal" href="Developer.html#plugins">Plugins</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Developer.html#network-trace">Network trace</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="HistoryAndReasons.html">   History</a><ul>
@@ -233,8 +235,9 @@ and well documented master functionality.</p>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="changelog.html#id1">2020.02</a></li>
-<li class="toctree-l2"><a class="reference internal" href="changelog.html#id2">2020.01</a></li>
+<li class="toctree-l2"><a class="reference internal" href="changelog.html#id1">2020.03</a></li>
+<li class="toctree-l2"><a class="reference internal" href="changelog.html#id2">2020.02</a></li>
+<li class="toctree-l2"><a class="reference internal" href="changelog.html#id3">2020.01</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a><ul>
@@ -243,12 +246,20 @@ and well documented master functionality.</p>
 <li class="toctree-l2"><a class="reference internal" href="PlannedFeatures.html#pro-features">PRO-Features</a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a><ul>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="BrowserDrivers.html#new-release-of-browser-drivers">New release of browser drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="BrowserDrivers.html#older-releases-of-browser-drivers">Older releases of browser drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">   :subheader: Articles</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="articles/ProductionSucks.html"> Production sucks</a></li>
 <li class="toctree-l2"><a class="reference internal" href="articles/DataDoctor.html"> Test data rulez</a></li>
 <li class="toctree-l2"><a class="reference internal" href="articles/BaangtIndustries.html"> Industries 4 baangt</a></li>
 <li class="toctree-l2"><a class="reference internal" href="articles/StopTesting.html"> Stop testing!</a></li>
 <li class="toctree-l2"><a class="reference internal" href="articles/AgileWorkflowIntegration.html"> bAanGtILE</a></li>
+<li class="toctree-l2"><a class="reference internal" href="articles/BugSoup.html"> BugSoup</a></li>
+<li class="toctree-l2"><a class="reference internal" href="articles/AsynchronousAndCanonTests.html"> Canons, that are not DSLR nor music</a></li>
+<li class="toctree-l2"><a class="reference internal" href="articles/SeleniumGridV4WithBaangt.html"> SeleniumGridV4</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>

BIN
docs/_build/html/objects.inv


+ 8 - 2
docs/_build/html/py-modindex.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Python Module Index &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Python Module Index &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -96,7 +96,8 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
-<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">   :subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
 
@@ -249,6 +250,11 @@
      <tr class="cg-1">
        <td></td>
        <td>&#160;&#160;&#160;
+       <a href="docs/baangt.base.html#module-baangt.base.Utils"><code class="xref">baangt.base.Utils</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
        <a href="docs/baangt.katalonImporter.html#module-baangt.katalonImporter"><code class="xref">baangt.katalonImporter</code></a></td><td>
        <em></em></td></tr>
      <tr class="cg-1">

+ 3 - 2
docs/_build/html/search.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Search &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Search &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -94,7 +94,8 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
-<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">   :subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
 

File diff suppressed because it is too large
+ 1 - 1
docs/_build/html/searchindex.js


+ 61 - 30
docs/_build/html/simpleExample.html

@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>Jump-start into worry free production deployments &mdash; baangt 2020.1.1.b11 documentation</title>
+  <title>Jump-start into worry free production deployments &mdash; baangt 2020.3.0.rc4 documentation</title>
   
 
   
@@ -108,6 +108,7 @@
 <li class="toctree-l1"><a class="reference internal" href="contributors.html">   Contributions</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changelog.html">   Changelog</a></li>
 <li class="toctree-l1"><a class="reference internal" href="PlannedFeatures.html">   Planned Features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="BrowserDrivers.html">   Browser Drivers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="articles/Articles.html">:subheader: Articles</a></li>
 <li class="toctree-l1"><a class="reference external" href="http://www.baangt.org">   Web</a></li>
 </ul>
@@ -176,7 +177,7 @@
             
   <div class="section" id="jump-start-into-worry-free-production-deployments">
 <h1>Jump-start into worry free production deployments<a class="headerlink" href="#jump-start-into-worry-free-production-deployments" title="Permalink to this headline">¶</a></h1>
-<p>You can try baangt right away and see, how it works. It’ll take less then 5 minutes.</p>
+<p>You can try baangt right away and see how it works. It’ll take less than 5 minutes.</p>
 <div class="section" id="prerequisits">
 <h2>Prerequisits<a class="headerlink" href="#prerequisits" title="Permalink to this headline">¶</a></h2>
 <ul class="simple">
@@ -184,8 +185,9 @@
 <li><p>Python3 installed</p></li>
 <li><p><code class="docutils literal notranslate"><span class="pre">baangt</span></code> installed (either via PIP or from the GIT-Repository at <a class="reference external" href="https://gogs.earthsquad.global/athos/baangt">https://gogs.earthsquad.global/athos/baangt</a>)</p></li>
 </ul>
-<p>If you prefer running <code class="docutils literal notranslate"><span class="pre">baangt</span></code> inside Docker use the Dockerfile from <a class="reference external" href="https://gogs.earthsquad.global/athos/baangt-Docker">https://gogs.earthsquad.global/athos/baangt-Docker</a>.
-After downloading the repository enter <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">build</span></code> and then <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code> in the command line. Once Docker is up, use SVN://localhost:5902 to connect. All features are exactly as you’d install everything on your local machine.</p>
+<p>If you prefer running <code class="docutils literal notranslate"><span class="pre">baangt</span></code> inside Docker, use the Dockerfile from <a class="reference external" href="https://gogs.earthsquad.global/athos/baangt-Docker">https://gogs.earthsquad.global/athos/baangt-Docker</a>.
+After downloading the repository, enter <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">build</span></code> and then <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code> in the command line.
+Once Docker is up, use SVN://localhost:5902 to connect. All features are exactly like you’d install everything on your local machine.</p>
 </div>
 <div class="section" id="let-s-dive-right-into-it">
 <h2>Let’s dive right into it<a class="headerlink" href="#let-s-dive-right-into-it" title="Permalink to this headline">¶</a></h2>
@@ -228,19 +230,19 @@ After downloading the repository enter <code class="docutils literal notranslate
 </ul>
 <div class="admonition hint">
 <p class="admonition-title">Hint</p>
-<p>If you want to be able to watch your browser executing each step we recommend you set the parameter <code class="docutils literal notranslate"><span class="pre">slowExecution</span></code> with value <code class="docutils literal notranslate"><span class="pre">True</span></code> in Globals and re-run the test</p>
+<p>If you want to be able to watch your browser executing each step, we recommend you set the parameter <code class="docutils literal notranslate"><span class="pre">slowExecution</span></code> with value <code class="docutils literal notranslate"><span class="pre">True</span></code> in Globals and re-run the test</p>
 </div>
 <div class="admonition hint">
 <p class="admonition-title">Hint</p>
-<p>If you want the browser window to stay open on errors and/or after execution you can use parameter <code class="docutils literal notranslate"><span class="pre">dontCloseBrowser</span></code> with value <code class="docutils literal notranslate"><span class="pre">True</span></code>
+<p>If you want the browser window to stay open on errors and/or after execution, you can use parameter <code class="docutils literal notranslate"><span class="pre">dontCloseBrowser</span></code> with value <code class="docutils literal notranslate"><span class="pre">True</span></code>
 in global settings and run the test again. The browser will stop on errors or when the test run execution stopped.</p>
 </div>
 </div>
 <div class="section" id="a-bit-further">
 <h3>A bit further<a class="headerlink" href="#a-bit-further" title="Permalink to this headline">¶</a></h3>
-<p>Go ahead and try it out with your personal real-world example of a webpage, web-app or SPA, which you would like to have
+<p>Go ahead and try it out with your personal real-world example of a web-page, web-app or SPA, which you would like to have
 reproducable regression tests for.</p>
-<p>Of course you could basically follow the steps above, but depending on the length and complexity of the execution you’ll
+<p>Of course you could basically follow the steps above, but depending on the length and complexity of the execution, you’ll
 definitely enjoy having more tools in your toolbox:</p>
 </div>
 <div class="section" id="recording-a-test-case-with-katalon-recorder">
@@ -265,27 +267,27 @@ definitely enjoy having more tools in your toolbox:</p>
 <li><p>Stop recording</p>
 <div class="admonition hint">
 <p class="admonition-title">Hint</p>
-<p>You might want to execute the test case from within Katalon Recorder so make sure everything was recorded proplery.</p>
+<p>You might want to execute the test case from within Katalon Recorder to make sure everything was recorded properly.</p>
 </div>
 </li>
 <li><p>Hit the export-Button of the recorder, chose format <code class="docutils literal notranslate"><span class="pre">other</span></code></p></li>
 <li><p>Click “Export to Clipboard”</p></li>
 <li><dl class="simple">
 <dt>Switch over to <code class="docutils literal notranslate"><span class="pre">baangt</span></code> and press the button “Import KatalonRecorder”</dt><dd><ul class="simple">
-<li><p>The contents from the clipboard should be imported already and translation to <code class="docutils literal notranslate"><span class="pre">baangt</span></code> should be completed. If not click on the button “Import Clipboard” and please drop a ticket stating your Operating System incl. Version and which Browser you used for Recording.</p></li>
+<li><p>The contents from the clipboard should be imported already and translation to <code class="docutils literal notranslate"><span class="pre">baangt</span></code> should be completed. If the clipboard was not inserted automatically, click on the button “Import Clipboard” and please drop a ticket stating your operating system incl. version and which browser you used for recording in Katalon recorder.</p></li>
 </ul>
 </dd>
 </dl>
 </li>
-<li><p>Press “Save” and choose where you want to store the resulting XLSX-File to</p></li>
+<li><p>Press “Save” and choose where you want to store the resulting XLSX-File</p></li>
 </ul>
 <p><strong>That’s it. You just created you first regression test case including all parameters for it.</strong></p>
-<p>If you’re wondering, which parameters these are and how you can influence them, fear not! Open the Testcase-XLSX from
+<p>If you’re wondering which parameters these are, and how you can influence them, fear not! Open the Testcase-XLSX from
 the last step above, click on the “data”-Tab and start to enter values and lines as you please.</p>
 <p>You can always re-run Baangt after saving your Testrun-XLSX and see your progress.</p>
 <div class="admonition hint">
 <p class="admonition-title">Hint</p>
-<p>If you want to be able to watch your browser executing each step we recommend you set the parameter <code class="docutils literal notranslate"><span class="pre">slowExecution</span></code> with value <code class="docutils literal notranslate"><span class="pre">True</span></code> in Globals and re-run the test</p>
+<p>If you want to be able to watch your browser executing each step, set the parameter <code class="docutils literal notranslate"><span class="pre">slowExecution</span></code> with value <code class="docutils literal notranslate"><span class="pre">True</span></code> in Globals and re-run the test</p>
 </div>
 </div>
 </div>
@@ -305,17 +307,17 @@ the last step above, click on the “data”-Tab and start to enter values and l
 </thead>
 <tbody>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">Activtity</span></code></p></td>
-<td><p>Sets the activity of this TestStep. Activities are desribed in more details in next chapter</p></td>
+<td><p>Sets the activity of this TestStep. Activities are described in more details in next chapter</p></td>
 </tr>
 <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">LocatorType</span></code></p></td>
-<td><p>Most of the activities need a locator. Were big fans of XPATH as locatorType, due to speed and ease of use. Sooner
+<td><p>Most of the activities need a locator. We are big fans of XPATH as locatorType, due to speed and ease of use. Sooner
 or later you’ll anyway end up needing XPATH, so why not use it always when there’s no downside? If you prefer
-writing CSS-Paths then use value <code class="docutils literal notranslate"><span class="pre">CSS</span></code> for the locator. And if you’re luck enough to have unique IDs in your
+writing CSS-Paths then use value <code class="docutils literal notranslate"><span class="pre">CSS</span></code> for the locator. And if you are lucky enough to have unique IDs in your
 page simply use <code class="docutils literal notranslate"><span class="pre">ID</span></code>.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">Locator</span></code></p></td>
-<td><p>The locator is the specification, on which element <code class="docutils literal notranslate"><span class="pre">Activity</span></code> should happen. As in the value fields you may
-use variable replacement here too in order to replace Locators with values from the data file, for instance the
+<td><p>The locator is the specification on which element <code class="docutils literal notranslate"><span class="pre">Activity</span></code> should happen. As in the value fields, you may
+use variable replacement here too, in order to replace Locators with values from the data file. For instance the
 following would work fine:
 <code class="docutils literal notranslate"><span class="pre">//*[&#64;id($(CUSTOMERNUMBER))]</span></code> - this would create an XPATH-Statement where $(CUSTOMERNUMBER) is replaced by the
 actual value of the current test record.</p></td>
@@ -332,11 +334,11 @@ second field or value to compare to. Values for <code class="docutils literal no
 follows the same logic as <code class="docutils literal notranslate"><span class="pre">value</span></code>.</p></td>
 </tr>
 <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">Timeout</span></code></p></td>
-<td><p>Sometimes you’ll want to overwrite the default timeout settings of <code class="docutils literal notranslate"><span class="pre">baangt</span></code>. Here’s your chance. Values in seconds,
+<td><p>Sometimes you might to overwrite the default timeout settings of <code class="docutils literal notranslate"><span class="pre">baangt</span></code>. Here’s your chance. Values in seconds,
 decimals are OK (<code class="docutils literal notranslate"><span class="pre">0.5</span></code> is a valid value, so is <code class="docutils literal notranslate"><span class="pre">90</span></code>).</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">Optional</span></code></p></td>
-<td><p>Usually, when <code class="docutils literal notranslate"><span class="pre">baangt</span></code> tries to execute an activity and can’t (after timeout), it will throw an exception,
+<td><p>Usually when <code class="docutils literal notranslate"><span class="pre">baangt</span></code> tries to execute an activity and can’t (after timeout), it will throw an exception,
 report in the Logs and stop the current test case. If you set <code class="docutils literal notranslate"><span class="pre">optional</span></code> to <code class="docutils literal notranslate"><span class="pre">True</span></code> or <code class="docutils literal notranslate"><span class="pre">X</span></code>, <code class="docutils literal notranslate"><span class="pre">baangt</span></code>
 will continue execution of the test case, even if the activity wasn’t possible.</p></td>
 </tr>
@@ -345,8 +347,8 @@ will continue execution of the test case, even if the activity wasn’t possible
 Migration, Pre-Production, etc.) and the software version on each stage is different. A test case, that works on
 Pre-Production will not pass on Dev-System as Dev is already further developed. If you change the test case to work
 on Dev-System and you need to test a Hotfix deployment on Pre-Production, what will you do? In other test solutions
-you would “simply” copy your test case, have one version for DEV, one for Pre-Production. Do that with 100s of
-different test cases and watch yourselve drown in chaos. OR you could use <code class="docutils literal notranslate"><span class="pre">baangt</span></code> where this problem is solved.
+you would “simply” copy your test case, have one version for DEV, one for Pre-Production. Do that with hundreds of
+different test cases and watch yourself drown in chaos. OR you could use <code class="docutils literal notranslate"><span class="pre">baangt</span></code> where this problem is solved.
 Software moves through the stages of your system landscape as it evolves. Use this field to conditionally execute
 different “branches” of your test cases, depending on the version on the current stage. <code class="docutils literal notranslate"><span class="pre">Release</span></code> can be any
 string value. You can add “&gt; ” “&lt; ” and “= ” as the first 2 characters to signal to <code class="docutils literal notranslate"><span class="pre">baangt</span></code> to only execute
@@ -354,7 +356,7 @@ the step when current release is greater than, lower than or exactly equal to th
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&gt;</span> <span class="mf">2019.05</span>
 </pre></div>
 </div>
-<p>will run the line onlf, if the Version is <code class="docutils literal notranslate"><span class="pre">2019.05a</span></code> or <code class="docutils literal notranslate"><span class="pre">2019.06</span></code>. We are aware, that your version numbers might
+<p>will run the line only, if the Version is <code class="docutils literal notranslate"><span class="pre">2019.05a</span></code> or <code class="docutils literal notranslate"><span class="pre">2019.06</span></code>. We are aware, that your version numbers might
 follow different nomenclature, so we made it very easy to subclass the corresponding logic.</p>
 </td>
 </tr>
@@ -372,6 +374,7 @@ follow different nomenclature, so we made it very easy to subclass the correspon
 <li><p>goBack</p></li>
 <li><p>If</p></li>
 <li><p>EndIf</p></li>
+<li><p>Pause</p></li>
 </ul>
 </div></blockquote>
 <table class="colwidths-given docutils align-default" id="id2">
@@ -387,8 +390,8 @@ follow different nomenclature, so we made it very easy to subclass the correspon
 </thead>
 <tbody>
 <tr class="row-even"><td><p>GoToURL</p></td>
-<td><p>Navigate to the given URL. Column <code class="docutils literal notranslate"><span class="pre">Value</span></code> must provide the URL. You may want to use variables in your URL-String,
-for instance your URL might look like <code class="docutils literal notranslate"><span class="pre">https://$(STAGE).earthsquad.global/</span></code>. <code class="docutils literal notranslate"><span class="pre">$(STAGE)</span></code> will be replaced
+<td><p>Navigate to the given URL. Column <code class="docutils literal notranslate"><span class="pre">Value</span></code> must provide the URL. You might want to use variables in your URL-String,
+for instance your URL might look like this <code class="docutils literal notranslate"><span class="pre">https://$(STAGE).earthsquad.global/</span></code>. It will be replaced
 during runtime of the test data with the value of <code class="docutils literal notranslate"><span class="pre">STAGE</span></code> from either Global settings or settings in the
 <code class="docutils literal notranslate"><span class="pre">testCaseSequence</span></code>.</p></td>
 </tr>
@@ -398,8 +401,8 @@ during runtime of the test data with the value of <code class="docutils literal
 <tr class="row-even"><td><p>clickIF</p></td>
 <td><p>Will click on the object specified by the locator IF the field in testDataDict, that you enter in Column <code class="docutils literal notranslate"><span class="pre">value</span></code>
 has a value. This small and simple extension can save you hours and hours of work in maintenance of testcases.
-Imagine youve 10 checkboxes, that in various combinations provide different test results and you have to test
-all possible combinations. Using 1 column in your datafile for each checkbox and the <code class="docutils literal notranslate"><span class="pre">clickif</span></code> you can create
+Imagine you have 10 checkboxes, that in various combinations provide different test results, and you have to test
+all possible combinations. Using one column in your datafile for each checkbox and the <code class="docutils literal notranslate"><span class="pre">clickif</span></code>, you can create
 your testCases in minutes instead of hours or days. Imagine 50 checkboxes - with <code class="docutils literal notranslate"><span class="pre">baangt</span></code> your effort is still
 just minutes.</p></td>
 </tr>
@@ -417,16 +420,44 @@ bulletproof test cases.</p></td>
 <td><p>Trigger the “back”-Button of the browser.</p></td>
 </tr>
 <tr class="row-even"><td><p>If/Endif</p></td>
-<td><p>The block between IF and ENDIF is only executed, when the condition evaluated by <code class="docutils literal notranslate"><span class="pre">value|comparator|value2</span></code> is
-is true, for instance:</p>
+<td><p>The block between IF and ENDIF is only executed when the condition evaluated by <code class="docutils literal notranslate"><span class="pre">value|comparator|value2</span></code> is
+true, for instance:</p>
 <blockquote>
 <div><p>$(POSTCODE) = 7040</p>
 <p>$(YEAR2DATE) &gt; $(YEARTOMONTH)</p>
 </div></blockquote>
-<p>Another use of the If-Statement is with <code class="docutils literal notranslate"><span class="pre">LocatorType</span></code> and <code class="docutils literal notranslate"><span class="pre">Locator</span></code> and comparison. You’d use that, when you
+<p>Another use of the If-Statement is with <code class="docutils literal notranslate"><span class="pre">LocatorType</span></code> and <code class="docutils literal notranslate"><span class="pre">Locator</span></code> and comparison. This can be used when you
 want conditional execution of a larger block of statements depending on an element present or not present.</p>
 </td>
 </tr>
+<tr class="row-odd"><td><p>assert</p></td>
+<td><p>Will retrieve value of element specified by <code class="docutils literal notranslate"><span class="pre">locator</span></code> and compare with reference value from <code class="docutils literal notranslate"><span class="pre">value</span></code>.</p></td>
+</tr>
+<tr class="row-even"><td><p>pause</p></td>
+<td><p>Will pause for the number of secons in <code class="docutils literal notranslate"><span class="pre">value</span></code>. Valid numbers are float, e.g. 2, 0.2, 0.1, 25</p></td>
+</tr>
+<tr class="row-odd"><td><p>address_create</p></td>
+<td><p>provide an easy and easily extendable way to generate address data for a test case
+The following fields variable are stored in testcaseDataDict:</p>
+<p>CountryCode
+PostalCode
+CityName
+StreetName
+HouseNumber
+AdditionalData1
+AdditionalData2</p>
+<dl class="simple">
+<dt><cite>value</cite>  optional</dt><dd><p>Default field-value: {‘HouseNumber’: ‘6’, ‘AdditionalData1’: ‘Near MahavirChowk’, ‘AdditionalData2’: ‘Opposite St. Marish Church’, ‘StreetName’: ‘GoreGaon’, ‘CityName’: ‘Ambala’, ‘PostalCode’: ‘160055’, ‘CountryCode’: ‘India’}</p>
+</dd>
+</dl>
+<p>These fields can be used as filter criteria in field value.
+Example value= <cite>{CountryCode:CY, PostlCode: 7}</cite>.</p>
+<p>Resulted field-value :{‘HouseNumber’: ‘6’, ‘AdditionalData1’: ‘Near MahavirChowk’, ‘AdditionalData2’: ‘Opposite St. Marish Church’, ‘StreetName’: ‘GoreGaon’, ‘CityName’: ‘Ambala’, ‘PostalCode’: ‘7’, ‘CountryCode’: ‘CY’}</p>
+<p><cite>value2</cite> optional
+If a prefix was povided in field Value2, the fieldnames will be concatenated with this prefix,
+e.g.if value2=`PremiumPayer_`, then the resulting field for CountryCode in testDataDict would become PremiumPayer_CountryCode.</p>
+</td>
+</tr>
 </tbody>
 </table>
 </div>

+ 5 - 0
docs/_build/linkcheck/output.txt

@@ -0,0 +1,5 @@
+SimpleAPI.rst:48: [broken] https://app-eu.earthsquad.global: 500 Server Error: Internal Server Error for url: https://app-eu.earthsquad.global/api/admin/login/?next=/api/admin/
+SimpleAPI.rst:48: [broken] https://app-eu.earthsquad.global/api/rest-auth/login: 500 Server Error: Internal Server Error for url: https://app-eu.earthsquad.global/api/rest-auth/login/
+articles/SeleniumGridV4WithBaangt.rst:4: [broken] https://baangt.org: HTTPSConnectionPool(host='baangt.org', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'baangt.org' doesn't match 'www.baangt.org'")))
+changelog.rst:64: [broken] https://baangt.jointhedocs.io: HTTPSConnectionPool(host='baangt.jointhedocs.io', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f8ac880da50>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))
+docs/baangt.TestSteps.rst:1: [broken] http://$(BASEURL)/$(ENDPOINT: HTTPConnectionPool(host='$(baseurl)', port=80): Max retries exceeded with url: /$(ENDPOINT (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8ac87a7fd0>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))

+ 2 - 1
docs/articles/Articles.rst

@@ -13,4 +13,5 @@ This section contains articles, that are not exactly documentation. Some are mor
     Stop testing! </articles/StopTesting.rst>
     bAanGtILE </articles/AgileWorkflowIntegration.rst>
     BugSoup </articles/BugSoup.rst>
-    Canons, that are not DSLR nor music </articles/AsynchronousAndCanonTests.rst>
+    Canons, that are not DSLR nor music </articles/AsynchronousAndCanonTests.rst>
+    SeleniumGridV4 </articles/SeleniumGridV4WithBaangt.rst>

+ 23 - 0
docs/articles/SeleniumGridV4WithBaangt.rst

@@ -0,0 +1,23 @@
+Integration with Selenium Grid V4
+=================================
+
+`baangt <https://baangt.org>`_ has now integration with `Selenium Grid V4 <https://github.com/SeleniumHQ/selenium/wiki/Selenium-Grid-4>`_.
+
+Following the same logic as with integration of `Zalenium <https://github.com/zalando/zalenium>`_ and current
+version of `Selenium Grid <https://www.guru99.com/introduction-to-selenium-grid.html>`_ you can define your test cases
+and test data definitions in Microsoft Excel using simpleFormat, full Format or subclassed TestStepMaster.
+
+The only difference is setting the Browser to ``REMOTE_V4``. Of course you'll need to provide address and port of the
+service in ``BrowserAttributes``.
+
+Ready for your own tests
+------------------------
+
+Even if you don't have a shiny Selenium Grid V4 Cluster on your own, you can simulate it using our Docker image. Just
+download the `repository <https://gogs.earthsquad.global/athos/baangt-Docker-SeleniumGrid4>`_, e.g. by using ``git clone``.
+Once it's downloaded use ``make build`` and ``make run`` to build and run the container. ``vnc://localhost:5902`` will
+grant access to the Desktop inside the container.
+
+.. image:: ../vncDesktopSeleniumGridDocker.png
+    :target: https://gogs.earthsquad.global/athos/baangt-Docker-SeleniumGrid4
+

+ 1 - 1
docs/conf.py

@@ -24,7 +24,7 @@ copyright = '2020, Bernhard Buhl'
 author = 'Bernhard Buhl'
 
 # The full version, including alpha/beta/rc tags
-release = '2020.1.1.b11'
+release = '2020.3.0.rc4'
 
 
 # -- General configuration ---------------------------------------------------

+ 2 - 2
docs/docs/baangt.base.rst

@@ -108,10 +108,10 @@ baangt.base.Timing module
    :undoc-members:
    :show-inheritance:
 
-baangt.base.utils module
+baangt.base.Utils module
 ------------------------
 
-.. automodule:: baangt.base.utils
+.. automodule:: baangt.base.Utils
    :members:
    :undoc-members:
    :show-inheritance:

+ 1 - 1
docs/index.rst

@@ -33,7 +33,7 @@ and well documented master functionality.
       Changelog <changelog.rst>
       Planned Features <PlannedFeatures.rst>
       Browser Drivers <BrowserDrivers.rst>
-   :subheader: Articles </articles/Articles.rst>
+      :subheader: Articles </articles/Articles.rst>
       Web <http://www.baangt.org>
 
 

BIN
docs/vncDesktopSeleniumGridDocker.png