<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6753730558880804866</id><updated>2025-05-05T04:10:02.582-07:00</updated><category term="WSO2"/><category term="automation"/><category term="selenium"/><category term="API testing"/><category term="ESB"/><category term="RestAssured"/><category term="Cucumber"/><category term="api-manager"/><category term="Action Classes"/><category term="Android"/><category term="G-Reg"/><category term="Identity Server"/><category term="Stratos"/><category term="TestNG"/><category term="appium"/><category term="cApp"/><category term="cloud"/><category term="eclipse"/><category term="logging"/><category term="user store"/><category term="wso2 cabon"/><category term="Mashup Server"/><category term="Page Object Model"/><category term="WSO2 AS"/><category term="database"/><category term="gadgets"/><category term="multitanancy"/><category term="mySQL"/><category term="ActiveDirectory"/><category term="App Server"/><category term="Architecture"/><category term="BDD"/><category term="CAR"/><category term="Carbon Studio"/><category term="Feature files"/><category term="Gadget Server"/><category term="Git"/><category term="JWT"/><category term="MainActivity"/><category term="Maven"/><category term="OSGi"/><category term="SSO"/><category term="Service Life Cycle"/><category term="WSO2 BAM"/><category term="activemq"/><category term="agile"/><category term="cep"/><category term="classpath"/><category term="clustering"/><category term="data file"/><category term="exploratory"/><category term="feature management"/><category term="human readable"/><category term="iterator"/><category term="jUnit"/><category term="media types"/><category term="mime"/><category term="mobile-testing"/><category term="operations scope"/><category term="oracle"/><category term="phpMyAdmin"/><category term="pom"/><category term="proxy service"/><category term="proxyHost"/><category term="security"/><category term="selenium rc"/><category term="self servicing"/><category term="stubs"/><category term="test charters"/><category term="threads"/><category term="transport"/><category term="waterfall"/><category term="webservices"/><category term="websphere"/><category term="worker-manager"/><category term="wso2server.sh"/><category term="xacml"/><category term="xml"/><category term="xpath"/><title type='text'>Yumani&#39;s Blog</title><subtitle type='html'>Day to day collection from work and self learning in QA, middleware, tech support spaces ..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>108</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-5687469402839752923</id><published>2023-09-10T10:02:00.002-07:00</published><updated>2023-09-10T10:34:46.861-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="appium"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><title type='text'>How to Scroll Down to an Element in Selenium WebDriver with Appium</title><content type='html'>&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_jEV7zaWCTStWRQkQ3YF5RSpgsEcTUuu0o38cYWpei0gJ9Tq91RvZmAuW5EDfiY4XnVxce3Q-b_8BcIhlAF0rKo9NL0mnIyq7l-MX_JXanRuWbLCyFNbEzxMb6RlnE4nQPPO4qmB7ab15k3WR3aBBjpGZdE6OLOUxJGej79Vinoy_sPDwNH1vXVC16GE/s768/blog%20pic2.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;768&quot; data-original-width=&quot;768&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_jEV7zaWCTStWRQkQ3YF5RSpgsEcTUuu0o38cYWpei0gJ9Tq91RvZmAuW5EDfiY4XnVxce3Q-b_8BcIhlAF0rKo9NL0mnIyq7l-MX_JXanRuWbLCyFNbEzxMb6RlnE4nQPPO4qmB7ab15k3WR3aBBjpGZdE6OLOUxJGej79Vinoy_sPDwNH1vXVC16GE/s320/blog%20pic2.jpeg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Let&#39;s say that you&#39;re automating a test scenario for a mobile application, and you need to interact with an element that is not initially visible on the screen. You need a way to scroll down until the element becomes visible, allowing you to perform actions on it.&lt;br /&gt;&lt;br /&gt;To tackle this problem, you can create a reusable method that scrolls down to a specified element. This method will use the TouchAction class in Appium to simulate a touch-based scroll gesture until the element becomes visible.&amp;nbsp;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Here&#39;s a sample method in Java:&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;scrollDownToElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;WebElement element&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    Dimension size &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getSize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; startX &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; size&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;width&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; startY &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;size&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;height&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0.8&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; endY &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;size&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;height&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #6600ee; font-weight: bold;&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(!&lt;/span&gt;element&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isDisplayed&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        TouchAction&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;?&amp;gt;&lt;/span&gt; action &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; TouchAction&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&amp;gt;((&lt;/span&gt;PerformsTouchActions&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        action&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;press&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;PointOption&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;point&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;startX&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; startY&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;waitAction&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;WaitOptions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;waitOptions&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Duration&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;ofMillis&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)))&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;PointOption&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;point&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;startX&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; endY&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Let&#39;s break down how this method works:&lt;br /&gt;&lt;/span&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;We obtain the screen dimensions to calculate the starting and ending points for the scroll gesture. So we set &lt;b&gt;startX&lt;/b&gt; to the middle of the screen, &lt;b&gt;startY&lt;/b&gt; to 80% down from the top, and &lt;b&gt;endY&lt;/b&gt; to 20% down from the top.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;We enter a while loop that continues until the specified element becomes visible.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Inside the loop, we create a &lt;b&gt;TouchAction&lt;/b&gt; instance and perform the following steps:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;press&lt;/b&gt;: We press at the starting point.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;waitAction&lt;/b&gt;: We introduce a small delay (500 milliseconds) to allow the element to become visible.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;moveTo&lt;/b&gt;: We move the touch to the ending point.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;release&lt;/b&gt;: We release the touch action.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;The scroll action is performed repeatedly until the element is displayed, indicating that it is now in view.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;The scrollDownToElement method presented here provides a reusable solution for ensuring that your target element is within view, allowing you to automate interactions seamlessly. Happy testing!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/5687469402839752923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/09/how-to-scroll-down-to-element-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/5687469402839752923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/5687469402839752923'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/09/how-to-scroll-down-to-element-in.html' title='How to Scroll Down to an Element in Selenium WebDriver with Appium'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_jEV7zaWCTStWRQkQ3YF5RSpgsEcTUuu0o38cYWpei0gJ9Tq91RvZmAuW5EDfiY4XnVxce3Q-b_8BcIhlAF0rKo9NL0mnIyq7l-MX_JXanRuWbLCyFNbEzxMb6RlnE4nQPPO4qmB7ab15k3WR3aBBjpGZdE6OLOUxJGej79Vinoy_sPDwNH1vXVC16GE/s72-c/blog%20pic2.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-1255004235838027846</id><published>2023-09-09T08:42:00.008-07:00</published><updated>2023-09-09T08:49:02.976-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="appium"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><title type='text'>Android Architectural Pattern - Databinding or 2 way Databinding.</title><content type='html'>&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: helvetica;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Web&amp;quot;, sans-serif&quot; style=&quot;font-size: 14px; white-space-collapse: preserve;&quot;&gt;We don&#39;t use resource Id&#39;s for these. They are designed using a different architectural pattern called data binding and in some cases 2 way data binding.&#39;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;This is what my friendly app lead told me when I told him I&#39;d like to have &#39;resource IDs&#39; for some of the elements in the UI.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;He further said to look &#39;automated testing using Android dataBinding&#39; and for any hook onto the databindingImpl classes.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Very useful hints :).. thanks G&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: verdana;&quot;&gt;Android DataBinding&lt;/span&gt;&lt;/h3&gt;Android DataBinding is a library that allows you to bind UI components in your app&#39;s layout files directly to data sources (e.g., ViewModel).&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;It simplifies the process of updating UI elements when data changes and can improve code readability&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: verdana;&quot;&gt;Steps to identify and interact with elements&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Assuming you are using appium/java. Also you have setup necesssary env setup such as mobile capabilties and driver initialisation , server startup, here is how the element capturing happens.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Since DataBinding allows you to bind UI elements directly to data sources, it is a bit different from the traditional method of locating elements using resource IDs or XPath&lt;/span&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;In Android DataBinding layouts, UI elements are bound to data sources using expressions like @{viewModel.text}.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;To locate and interact with these elements in your automated tests, you can use the driver.findElementByAndroidUIAutomator method.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;You construct a UiSelector expression that matches the text or other attributes bound to the element.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;In this case, I am looking for a TextView with the text matching viewModel.text.&lt;/span&gt;&lt;span style=&quot;font-family: helvetica;&quot;&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/span&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; font-family: helvetica; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;io.appium.java_client.android.AndroidElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #888888;&quot;&gt;// Locate TextView using DataBinding expression&lt;/span&gt;
AndroidElement textView &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElementByAndroidUIAutomator&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;
    &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;new UiSelector().textMatches(\&quot;.*&quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; viewModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;text&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;.*\&quot;)&quot;&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Once I have identified the element using DataBinding expression, I can perform various interactions such as clicking, sending text, or verifying properties.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: helvetica;&quot;&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/span&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; font-family: helvetica; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #888888;&quot;&gt;// Click a button&lt;/span&gt;
button&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/1255004235838027846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/09/android-architectural-pattern-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/1255004235838027846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/1255004235838027846'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/09/android-architectural-pattern-data.html' title='Android Architectural Pattern - Databinding or 2 way Databinding.'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-339275327266650214</id><published>2023-09-08T15:52:00.008-07:00</published><updated>2023-09-10T09:51:25.573-07:00</updated><title type='text'>How to scroll down in ScollView uiElement using Selenium WebDriver with Appium</title><content type='html'>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: helvetica;&quot;&gt; A ScrollView is a common UI element in mobile app development, particularly in Android and iOS development. It&#39;s used to create a scrollable view that can contain content that doesn&#39;t fit entirely on the screen, allowing users to scroll vertically or horizontally to see more content.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: helvetica;&quot;&gt;&lt;br /&gt;Now let&#39;s see appium code for scroll ingto an element within a ScrollView in Android.&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;scrollDownInScrollView&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;WebElement scrollview&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Calculate screen dimensions&lt;/span&gt;
        &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; screenHeight &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;manage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getSize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getHeight&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;

        &lt;span style=&quot;color: #888888;&quot;&gt;// Define scroll points&lt;/span&gt;
        &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; startX &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; scrollview&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getLocation&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getX&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; scrollview&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getSize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getWidth&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; startY &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; scrollview&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getLocation&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getY&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; scrollview&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getSize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getHeight&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;3&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; endY &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; scrollview&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getLocation&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getY&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; scrollview&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getSize&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getHeight&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

        &lt;span style=&quot;color: #888888;&quot;&gt;// Perform the scroll action&lt;/span&gt;
        TouchAction&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;?&amp;gt;&lt;/span&gt; action &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; TouchAction&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&amp;gt;((&lt;/span&gt;PerformsTouchActions&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        action&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;press&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;PointOption&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;point&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;startX&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; startY&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;waitAction&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;WaitOptions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;waitOptions&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Duration&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;ofMillis&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)))&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;PointOption&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;point&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;startX&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; endY&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;background-color: white; color: #080808; font-size: 9.8pt; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: helvetica;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/339275327266650214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/09/scrolling-in-scollview-uielement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/339275327266650214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/339275327266650214'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/09/scrolling-in-scollview-uielement.html' title='How to scroll down in ScollView uiElement using Selenium WebDriver with Appium'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-8120962671628181967</id><published>2023-08-15T13:36:00.005-07:00</published><updated>2023-08-25T09:01:15.409-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="exploratory"/><category scheme="http://www.blogger.com/atom/ns#" term="test charters"/><title type='text'>Test tours</title><content type='html'>&lt;p&gt;To explain test tours, I will start with exploratory testing.&lt;/p&gt;&lt;p&gt;Explotatory testing is a more creative way of testing, but doesn&#39;t mean to say it is a random testing as well. Experts say exploratory can be more effective when we make use of test chrters.&lt;/p&gt;&lt;p&gt;Test tours is one of the methods that we can adopt to write test charters (test purpose) for exploratory testing.&lt;/p&gt;&lt;p&gt;Below are some of the tours that I found in the web. All kudos to this page [&lt;a href=&quot;https://www.getxray.app/blog/test-charters-exploratory-testing&quot; target=&quot;_blank&quot;&gt;1&lt;/a&gt;]. I am copying and pasting it here for my notes.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;background-color: white; box-sizing: border-box; margin: 0px 0px 20px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Obsessive-Compulsive tour:&lt;/strong&gt;&amp;nbsp;This tour aims to repeat the same action as often as possible. This tour can reveal bugs like applying the discount twice.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;background-color: white; box-sizing: border-box; margin: 0px 0px 20px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Bad-Neighborhood tour:&lt;/strong&gt;&amp;nbsp;Explore the area or feature that has the most errors. In this tour, you spend time on areas known to have issues.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;background-color: white; box-sizing: border-box; margin: 0px 0px 20px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Supermodel tour:&amp;nbsp;&lt;/strong&gt;This tour focuses only on surface looks and the impressions it makes. Test the UI interface and design elements like layouts, icons, flows, and colors.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;background-color: white; box-sizing: border-box; margin: 0px 0px 20px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Museum tour:&lt;/strong&gt;&amp;nbsp;Test code that developers didn&#39;t change in a while. You can experiment with how the code functions in new environments (Android, iOS, etc.).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/8120962671628181967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/08/test-tours.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8120962671628181967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8120962671628181967'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/08/test-tours.html' title='Test tours'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-4674711273907236053</id><published>2023-07-30T10:53:00.008-07:00</published><updated>2023-07-30T10:53:53.696-07:00</updated><title type='text'>UiAutomatorViewer isn&#39;t working with higher java versions.</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I was getting this error when tried with my default Java 11;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #343541; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; white-space-collapse: preserve;&quot;&gt;./uiautomatorviewer    
-Djava.ext.dirs=/Users/yumani/Library/Android/sdk/tools/lib/x86_64:/Users/yumani/Library/Android/sdk/tools/lib is not supported.  Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The problem seems to be caused by the usage of the -Djava.ext.dirs option, which is not supported in newer versions of Java.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Then, I used use -classpath option to set the classpath and got this error&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #343541; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; white-space-collapse: preserve;&quot;&gt;yumani@Yumanis-MacBook-Pro bin % ./uiautomatorviewer -classpath /Users/yumani/Library/Android/sdk/tools/lib/x86_64:/Users/yumani/Library/Android/sdk/tools/lib
-Djava.ext.dirs=/Users/yumani/Library/Android/sdk/tools/lib/x86_64:/Users/yumani/Library/Android/sdk/tools/lib is not supported.  Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I am on Java11,&amp;nbsp; tried different options in the net such as upgratig sdk-tools, downloading swt.jar.&lt;/p&gt;&lt;p&gt;Non worked for me in macOS Ventura.&lt;/p&gt;&lt;p&gt;The web advise that worked was downgrading to jdk 1.8.&lt;/p&gt;&lt;p&gt;So I installed jdk 1.8, updated in .bash_profile, commented out my older version (because I want to switch back to it when I am not using the&amp;nbsp;UiAutomatorViewer.&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 11px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;source ~/.bash_profile&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 11px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;yumani@Yumanis-MacBook-Pro sdk % tools/bin/uiautomatorviewer -classpath /Users/yumani/Library/Android/sdk/tools/lib/x86_64/swt.jar&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 11px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 11px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 11px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 11px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhp2W1FnCbKOgr588B250ODydQgxsn7IypY4I9vF16BdbMsOy2An6V_Kc6Kgzs5XF9-pp9SIPzaGMTbUjuuE-YbzOu_q-yYflBNkXiqvOh817MPemurThsTAl0SBL2mKMEk68R7mJcGmcak3OdngGGgXktjyxmHzn1JwnNapeIlcY6QltsnQWKH166cheU&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1476&quot; data-original-width=&quot;1974&quot; height=&quot;325&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhp2W1FnCbKOgr588B250ODydQgxsn7IypY4I9vF16BdbMsOy2An6V_Kc6Kgzs5XF9-pp9SIPzaGMTbUjuuE-YbzOu_q-yYflBNkXiqvOh817MPemurThsTAl0SBL2mKMEk68R7mJcGmcak3OdngGGgXktjyxmHzn1JwnNapeIlcY6QltsnQWKH166cheU=w435-h325&quot; width=&quot;435&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/4674711273907236053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/07/uiautomatorviewer-isnt-working-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4674711273907236053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4674711273907236053'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/07/uiautomatorviewer-isnt-working-with.html' title='UiAutomatorViewer isn&#39;t working with higher java versions.'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhp2W1FnCbKOgr588B250ODydQgxsn7IypY4I9vF16BdbMsOy2An6V_Kc6Kgzs5XF9-pp9SIPzaGMTbUjuuE-YbzOu_q-yYflBNkXiqvOh817MPemurThsTAl0SBL2mKMEk68R7mJcGmcak3OdngGGgXktjyxmHzn1JwnNapeIlcY6QltsnQWKH166cheU=s72-w435-h325-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-8064979390565521731</id><published>2023-07-30T03:04:00.006-07:00</published><updated>2023-07-30T03:04:49.569-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="MainActivity"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile-testing"/><title type='text'>How to identify the main actvity from the AndroidManifest.xml</title><content type='html'>&lt;p&gt;&amp;nbsp;When you setup applium capacbilities giving the app package and app activity, you have to give the main activity as the app activity.&lt;/p&gt;&lt;p&gt;Here is how you identify the main activity from&amp;nbsp;AndroidManifest.xml when it has multiple activities.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Locate the AndroidManifest.xml:&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The AndroidManifest.xml file is located in the app folder of your Android project. The typical path is app/src/main/AndroidManifest.xml.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Open the AndroidManifest.xml:&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Use a text editor or an XML editor to open the AndroidManifest.xml file.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Search for &amp;lt;activity&amp;gt; tags:&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Inside the AndroidManifest.xml, look for &amp;lt;activity&amp;gt; tags. Each &amp;lt;activity&amp;gt; tag represents an activity (screen) of the Android application.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Find the Main Activity:&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The AppActivity is usually the main activity of the app. It is the entry point of the application, and its intent filter is often set to respond to the android.intent.action.MAIN and android.intent.category.LAUNCHER actions.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Look for Intent Filters:&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Inside the &amp;lt;activity&amp;gt; tags, check for &amp;lt;intent-filter&amp;gt; tags. The AppActivity should have an &amp;lt;intent-filter&amp;gt; that includes the android.intent.action.MAIN and android.intent.category.LAUNCHER actions.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Extract the AppActivity Name:&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Extract the value of the android:name attribute from the &amp;lt;activity&amp;gt; tag that has the &amp;lt;intent-filter&amp;gt; with the android.intent.action.MAIN and android.intent.category.LAUNCHER actions. The value of android:name attribute will be the AppActivity.&lt;/p&gt;&lt;p&gt;&amp;lt;activity&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:name=&quot;.ui.MainActivity&quot;&amp;nbsp; &amp;lt;!-- This is the AppActivity --&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:label=&quot;@string/app_name&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;intent-filter&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/intent-filter&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/activity&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In this example, the AppActivity is .ui.MainActivity.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/8064979390565521731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/07/how-to-identify-main-actvity-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8064979390565521731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8064979390565521731'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/07/how-to-identify-main-actvity-from.html' title='How to identify the main actvity from the AndroidManifest.xml'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-4858212415409660115</id><published>2023-03-31T06:41:00.007-07:00</published><updated>2023-04-08T10:21:40.383-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API testing"/><category scheme="http://www.blogger.com/atom/ns#" term="appium"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber"/><category scheme="http://www.blogger.com/atom/ns#" term="RestAssured"/><title type='text'>Hybrid approach to Automation</title><content type='html'>&lt;p&gt;What does hybrid approach to test automation mean?&lt;/p&gt;&lt;p&gt;It&#39;s a strategic approach that aims to support better maintainability and reduce flakiness in end-to-end (E2E) test automation. This approach involves using a combination of API tests and UI tests.&lt;/p&gt;&lt;p&gt;In scenarios where certain prerequisites must be met before attempting the actual test, we can use endpoint calls/API tests to achieve these prerequisites. Then, we can use webdriver tests for UI-level functional validations/assertions.&lt;/p&gt;&lt;p&gt;By using this approach, we can redice the flakiness that may come from&amp;nbsp; webdriver tests due to delays, object changes, and other issues. This approach is particularly useful for sections of the test case that are outside the main test case.&lt;/p&gt;&lt;p&gt;Let me explain with an example:&lt;/p&gt;&lt;p&gt;In here we are doing a mandatry field validation check; Our featue file is as below;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Scenario:&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt; Mandatory fields validation&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Given &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;I am a registered user&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;And &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;I go to the accounts page&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;And &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;I leave the basic salary field blank&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;When &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;I try to move to the next page&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Then &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;a validation error message is displayed for the basic salary field&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;My step definition will be like this;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;MandatoryFieldsValidationStepDefinitions&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Given&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;I am a registered user&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;iAmARegisteredUser&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Code to implement the Creat user step using RestAssured API&lt;/span&gt;
        
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@And&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;I go to the accounts page&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;iGoToTheAccountsPage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Code to implement the &quot;And&quot; step using Appium&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Navigate to the accounts page using Appium&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@And&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;I leave the basic salary field blank&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;iLeaveTheBasicSalaryFieldBlank&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Code to implement the &quot;And&quot; step using Appium&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Find the basic salary field element and clear its value&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@When&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;I try to move to the next page&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;iTryToMoveToTheNextPage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Code to implement the &quot;When&quot; step using Appium&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Find the &quot;Next&quot; button element and click it&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Then&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;a validation error message is displayed for the basic salary field&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;aValidationErrorMessageIsDisplayedForTheBasicSalaryField&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Code to implement the &quot;Then&quot; step using Appium&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// Find the error message element for the basic salary field and verify it is displayed&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So how do we support this in our test framework? Since the CucumberRunner takes care of executing the features by mapping them with the correct step definition, all we have to do is ensure that our design is correct and that relevant API testing and webdriver libraries are included in the project.&lt;/p&gt;&lt;p&gt;A sample automation framework structure for a Maven project is shown below;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPG8jBaRv7vUqg5_zjgTjU9UqH1B_4e-tCC3qW2-_OAuvYUy9-dAHRghtbig51wXsYHf04KtS6etzbahzHebVFfyNdZOTdQ8kiYTd6QKCPRKvbOuqCGZPw82uR6QIuvs257lq8Hl8zuiExwLJ4Mp14HXf0qt5Q3Ve90X-KIeXY8ArNayxmBGi2DH3y/s3985/automation.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3985&quot; data-original-width=&quot;2989&quot; height=&quot;460&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPG8jBaRv7vUqg5_zjgTjU9UqH1B_4e-tCC3qW2-_OAuvYUy9-dAHRghtbig51wXsYHf04KtS6etzbahzHebVFfyNdZOTdQ8kiYTd6QKCPRKvbOuqCGZPw82uR6QIuvs257lq8Hl8zuiExwLJ4Mp14HXf0qt5Q3Ve90X-KIeXY8ArNayxmBGi2DH3y/w345-h460/automation.jpg&quot; width=&quot;345&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;483&#39; height=&#39;343&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dw6o4v6pXHILCev5pjfpWktvcsFa_9xObzh2qOQ6GnLp0NaynLbOQt8wrfjlGmkz1s-fYTLAYUgeYcn_iL0dA&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/4858212415409660115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/hybrid-approach-to-automation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4858212415409660115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4858212415409660115'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/hybrid-approach-to-automation.html' title='Hybrid approach to Automation'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPG8jBaRv7vUqg5_zjgTjU9UqH1B_4e-tCC3qW2-_OAuvYUy9-dAHRghtbig51wXsYHf04KtS6etzbahzHebVFfyNdZOTdQ8kiYTd6QKCPRKvbOuqCGZPw82uR6QIuvs257lq8Hl8zuiExwLJ4Mp14HXf0qt5Q3Ve90X-KIeXY8ArNayxmBGi2DH3y/s72-w345-h460-c/automation.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-2919003096378173479</id><published>2023-03-30T06:27:00.005-07:00</published><updated>2023-03-31T05:56:26.087-07:00</updated><title type='text'>CT Server?</title><content type='html'>&lt;p&gt;What is CT Server?&lt;/p&gt;&lt;p&gt;Recently, I have been reading a lot, or rather more than usual, about Continuous Testing. In fact, I have been trying to design such a process here at BlackArrow. However, today I came across some real details about the CT Server.&lt;/p&gt;&lt;p&gt;So, what is a CT Server? It refers to Continuous Testing server. The blog post that I read advised against using Jenkins for CT. Also, E2E testing is not something that Jenkins deals with in CI builds.&lt;/p&gt;&lt;p&gt;Instead, the author recommends using CT servers, such as BuildWise, which is an open-source software. I am yet to explore how it does things, but I&#39;ll be back with another post soon.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/2919003096378173479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/ct-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/2919003096378173479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/2919003096378173479'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/ct-server.html' title='CT Server?'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-4091757097013987799</id><published>2023-03-21T07:49:00.006-07:00</published><updated>2023-03-21T11:36:51.585-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber"/><category scheme="http://www.blogger.com/atom/ns#" term="Feature files"/><category scheme="http://www.blogger.com/atom/ns#" term="TestNG"/><title type='text'>CucumberRunner sample</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In this example file, I&#39;ve added the following options while extending the AbstractTestNGCucumberTests class&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; text-align: left; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;cucumber.api.CucumberOptions&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;cucumber.api.testng.AbstractTestNGCucumberTests&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@CucumberOptions&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;
        features &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;src/test/resources/features&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
        glue &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;step_definitions&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;},&lt;/span&gt;
        tags &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;@JREQ-BA001-2088 or @smoke or @SE&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
        plugin &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;pretty&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;html:target/cucumber-html-report&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;json:target/cucumber.json&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;rerun:target/rerun.txt&quot;&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;},&lt;/span&gt;
        strict &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
        monochrome &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
        dryRun &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
        snippets &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; cucumber&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;SnippetType&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;CAMELCASE&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;MyTestRunner&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;extends&lt;/span&gt; AbstractTestNGCucumberTests &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;tags&lt;/b&gt;: Allows you to run only scenarios with specific tags. In this case, we&#39;re running scenarios with any of the three tags specified in the feature file. I have the story ticket, the test inclusion category and the feature tagged.&lt;/li&gt;&lt;li&gt;&lt;b&gt;plugin&lt;/b&gt;: This specifies the output formats for the Cucumber report. In addition to the &quot;pretty&quot; format, we&#39;re also generating an HTML report, a JSON report, and a rerun file (which lists any scenarios that failed on the first run and need to be rerun).&lt;/li&gt;&lt;li&gt;&lt;b&gt;strict&lt;/b&gt;: If set to true, Cucumber will fail if there are any undefined or pending steps. I prefer to have this set to false and user the power of the dryRun option.&lt;/li&gt;&lt;li&gt;&lt;b&gt;monochrome&lt;/b&gt;: This makes the output in the console easier to read by removing colour and special characters.&lt;/li&gt;&lt;li&gt;&lt;b&gt;dryRun&lt;/b&gt;: If set to true, Cucumber will check that all steps have corresponding step definitions, but won&#39;t actually run the scenarios. This can be useful for quickly checking that your step definitions match your feature file.&lt;/li&gt;&lt;li&gt;&lt;b&gt;snippets&lt;/b&gt;: This specifies the naming convention for generated step definitions. In this case, we&#39;re using CamelCase naming.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/4091757097013987799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/cucumberrunner-smaple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4091757097013987799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4091757097013987799'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/cucumberrunner-smaple.html' title='CucumberRunner sample'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-8631681179329767820</id><published>2023-03-17T09:25:00.003-07:00</published><updated>2023-03-17T09:47:47.269-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API testing"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber"/><category scheme="http://www.blogger.com/atom/ns#" term="RestAssured"/><title type='text'>Chosen path for using feature files to call my test daa</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;This is a summary of the findings from my research past week.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiimR4FVKrWu9fRqkjqF2lblJ8ePEYWTCVzMy8_Qd_DwjafOFviaVmj8gJxamEYUQArkUi6Yg6-D1oDhH9xKMF_jbFNKuEoK0wqk5jP_phrun3L5TWZO8eZTbf4qFIl2lxojKLyBB_h3IW0xWw9skmzf8QvAReWvTmqamQ13_0CKqxXo0mirirq_4Xw/s1611/featureFileScenarios.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;687&quot; data-original-width=&quot;1611&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiimR4FVKrWu9fRqkjqF2lblJ8ePEYWTCVzMy8_Qd_DwjafOFviaVmj8gJxamEYUQArkUi6Yg6-D1oDhH9xKMF_jbFNKuEoK0wqk5jP_phrun3L5TWZO8eZTbf4qFIl2lxojKLyBB_h3IW0xWw9skmzf8QvAReWvTmqamQ13_0CKqxXo0mirirq_4Xw/w718-h305/featureFileScenarios.PNG&quot; width=&quot;718&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Out of these, I am choosing the method 3 considering the plus points that I could think of..&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/8631681179329767820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/chosen-path-for-using-feature-files-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8631681179329767820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8631681179329767820'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/chosen-path-for-using-feature-files-to.html' title='Chosen path for using feature files to call my test daa'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiimR4FVKrWu9fRqkjqF2lblJ8ePEYWTCVzMy8_Qd_DwjafOFviaVmj8gJxamEYUQArkUi6Yg6-D1oDhH9xKMF_jbFNKuEoK0wqk5jP_phrun3L5TWZO8eZTbf4qFIl2lxojKLyBB_h3IW0xWw9skmzf8QvAReWvTmqamQ13_0CKqxXo0mirirq_4Xw/s72-w718-h305-c/featureFileScenarios.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-3057510150094171703</id><published>2023-03-14T16:57:00.010-07:00</published><updated>2023-03-15T02:37:31.785-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API testing"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber"/><category scheme="http://www.blogger.com/atom/ns#" term="RestAssured"/><title type='text'>Using feature files for API test automation - 3</title><content type='html'>&lt;p&gt;In here the entire user payload is read from the examples table and stored as a Map in the step definition.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This approach is useful when you have a small number of fields in the request body, and you can easily read them from the feature file&#39;s data table.&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Scenario Outline:&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt; Create User Successfully&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;    Given &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;the user payload is:&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; first_name&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;first_name&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; last_name&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;     |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;last_name&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; email&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;         |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;email&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; mobile_phone&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;mobile_phone&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; date_of_birth&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;date_of_birth&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; password&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;password&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;   |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; username&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;      |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;username&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;   |&lt;/span&gt;

&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;When &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;I send a &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;method&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt; request to &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;path&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;

&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Then &lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;the response status code should be &lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt;&amp;lt;status_code&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;

&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;Examples:&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; first_name&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; last_name&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; email&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;                 |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; mobile_phone&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; date_of_birth&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; password&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; username&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; method&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; path&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;           |&lt;/span&gt;&lt;span style=&quot;color: #996633;&quot;&gt; status_code&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; John&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;       |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; Doe&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;       |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; john.doe@example.com&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; 1234567890&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; 1990-01-01&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; password&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; johndoe&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; POST&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;   |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; /users/create&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt; 201&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;         |&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My stpe definition is as below;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;CreateUserStepDefinitions&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; RequestSpecification requestSpec&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; Response response&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; Map&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; userPayload &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; HashMap&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Given&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;the user payload is:&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;the_user_payload_is&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Map&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; userData&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;userPayload&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; userData&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@When&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;I send a {string} request to {string}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;i_send_a_request_to&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String method&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String path&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        requestSpec &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; RestAssured&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;given&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;contentType&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ContentType&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;userPayload&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        response &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; requestSpec&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;when&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt;
                &lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;method&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; path&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Then&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;the response status code should be {int}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;the_response_status_code_should_be&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; expectedStatusCode&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        assertEquals&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;expectedStatusCode&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; response&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getStatusCode&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Let me explain the java bits in here -&amp;nbsp;&lt;p&gt;&lt;/p&gt;

&lt;/div&gt;&lt;div&gt;In the method &lt;b&gt;the_user_payload_is&lt;/b&gt;, the Map&amp;lt;String, String&amp;gt; userData parameter contains the data that was provided in the Examples table of the feature file. The data is in key-value pairs where the key represents the column header and the value represents the corresponding cell value.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;this.userPayload variable is an instance variable of the class (which means it can be accessed from any method within the class). In the_user_payload_is method, we are assigning the userData map to the userPayload instance variable. This is done so that we can access the userPayload map in other methods within the class, specifically the i_send_a_request_to method.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the&lt;b&gt; i_send_a_request_to&lt;/b&gt; method, we are using the userPayload map as the body of the request.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;The RestAssured.given() method is used to start building the request. It is followed by the .contentType(ContentType.JSON) method, which specifies that the request body will be in JSON format. The .body(userPayload) method sets the request body as the userPayload object, which contains the data for creating a new user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The requestSpec.when().request(method, path) method is then called to send the request to the server with the given method and path. This method returns a response object, which is stored in the response variable for later use in &lt;b&gt;the_response_status_code_should_be&lt;/b&gt; method.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/3057510150094171703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/using-feature-files-for-api-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/3057510150094171703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/3057510150094171703'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/using-feature-files-for-api-test.html' title='Using feature files for API test automation - 3'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-3563362302997862048</id><published>2023-03-13T10:49:00.000-07:00</published><updated>2023-03-13T10:49:38.626-07:00</updated><title type='text'>Two different flavours of feature files</title><content type='html'>&lt;h4 style=&quot;text-align: left;&quot;&gt;Format 1 - Scenario outline with example table&lt;/h4&gt;&lt;pre style=&quot;color: #080808; font-size: 13.0667px;&quot;&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Given &lt;/span&gt;I have a valid auth token&lt;br /&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;When &lt;/span&gt;I submit a POST request to create a user with the following details:&lt;br /&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;first_name  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;last_name    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;email    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;mobile_phone &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;date_of_birth &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;username    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;first_name&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;last_name&amp;gt;  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;email&amp;gt;  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;mobile_phone&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;date_of_birth&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;password&amp;gt;  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;username&amp;gt;  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Then &lt;/span&gt;the response status code should be &amp;lt;status_code&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Examples&lt;/span&gt;:&lt;br /&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;first_name &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;last_name&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;email                 &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;mobile_phone &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;date_of_birth &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;username    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;status_code &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;John       &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;Doe      &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;johndoe@example.com   &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1234567890   &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1990-01-01    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password123 &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;johndoe123  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;201         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;Jane       &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;Smith    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;janesmith@example.com &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;0987654321   &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1985-02-14    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password456 &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;janesmith12 &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;201         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;This format gives a higher level of abstraction where the same scenario is run multiple times with different sets of data. Yes data including the expected result as well.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This format is useful when you don&#39;t want to repeat the same scenario. Also when you have a simpler payload.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Format 2 - Single Scenario with Given\When\Then steps&lt;/h4&gt;&lt;div style=&quot;background-color: white; color: #080808; font-family: &#39;JetBrains Mono&#39;,monospace; font-size: 9.8pt;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Feature&lt;/span&gt;: Create User API&lt;br /&gt;&lt;br /&gt;  &lt;span style=&quot;color: #0033b3;&quot;&gt;Scenario&lt;/span&gt;: Create User Successfully&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;Given &lt;/span&gt;the user payload is:&lt;br /&gt;      &lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;first_name    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;John   &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;last_name     &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;Doe    &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;email         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;john.doe@example.com &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;mobile_phone  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1234567890 &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;date_of_birth &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1990-01-01 &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password      &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;username      &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;johndoe &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;    When &lt;/span&gt;I send a {method} request to {path}&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;Then &lt;/span&gt;the response status code should be &lt;span style=&quot;color: #297bde;&quot;&gt;201&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;method  &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;path         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;status_code &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;    | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;POST    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;/users/create&quot;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;201          &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This gives more detailed description of the scenario. Each @Given, @When, @Then step is elaborated with relevant data.&lt;/p&gt;&lt;p&gt;In this case you may be having more specific scenarios and conditions.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/3563362302997862048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/two-different-flavours-of-feature-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/3563362302997862048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/3563362302997862048'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/two-different-flavours-of-feature-files.html' title='Two different flavours of feature files'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-2653142524978841830</id><published>2023-03-12T16:24:00.008-07:00</published><updated>2023-03-15T02:25:36.263-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API testing"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="RestAssured"/><title type='text'>Using feature files for API test autimation - 2</title><content type='html'>&lt;p&gt;&amp;nbsp;Feature file&lt;/p&gt;&lt;p style=&quot;background-color: white; font-family: Verdana, Geneva, sans-serif; font-size: 13.2px;&quot;&gt;Similar to the last post, I&#39;m usinng RestAssured for API test automation. Cucumber is used for mapping the feature scenarios. Also extending AbstractTestNGCucmberTests to run the test suite.&lt;/p&gt;&lt;p style=&quot;background-color: white; font-family: Verdana, Geneva, sans-serif; font-size: 13.2px;&quot;&gt;Difference is the way the payload is handled. Instead of reading the payload from exmaple tables, I am loading it from a json file.&lt;/p&gt;&lt;p style=&quot;background-color: white; font-family: Verdana, Geneva, sans-serif; font-size: 13.2px;&quot;&gt;This way it gives me more flexibility in managing test data/payloads.&lt;/p&gt;&lt;p style=&quot;background-color: white; font-family: Verdana, Geneva, sans-serif; font-size: 13.2px;&quot;&gt;I am still using exmaple tables to read other paramaters via &amp;lt;&amp;gt; tags in my featuer file .&lt;/p&gt;&lt;div style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Feature&lt;/span&gt;: Create User API&lt;br /&gt;&lt;br /&gt;  &lt;span style=&quot;color: #0033b3;&quot;&gt;Scenario Outline&lt;/span&gt;: Create User Successfully&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;Given &lt;/span&gt;the user payload file is &amp;lt;data_file&amp;gt;&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;When &lt;/span&gt;I send a &amp;lt;method&amp;gt; request to &amp;lt;path&amp;gt;&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;Then &lt;/span&gt;the response status code should be &lt;span style=&quot;color: #297bde;&quot;&gt;&amp;lt;status_code&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Examples&lt;/span&gt;:&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #c37522; font-style: italic;&quot;&gt;data_file                             &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #c37522; font-style: italic;&quot;&gt;method &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #c37522; font-style: italic;&quot;&gt;path          &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #c37522; font-style: italic;&quot;&gt;status_code &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;/test/java/resources/user_details.json &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;POST   &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;/user_accounts/create &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;201         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Payload file&lt;/p&gt;&lt;div style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;pre&gt;{&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;first_name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;John&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;last_name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;Doe&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;email&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;john.doe@example.com&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;mobile_phone&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;1234567890&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;date_of_birth&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;1990-01-01&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;password&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;p@ssword_1&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;username&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;johndoe&quot;&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CreateUserStep.java&lt;/p&gt;&lt;div style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;public class &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;CreateUserSteps&lt;/span&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;RequestSpecification &lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;requestSpec&lt;/span&gt;;&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;Response &lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;response&lt;/span&gt;;&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;requestBody&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #9e880d;&quot;&gt;@Given&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;the user payload file is {string}&quot;&lt;/span&gt;)&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;the_user_payload_file_is&lt;/span&gt;(&lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;filePath) {&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;requestBody &lt;/span&gt;= &lt;span style=&quot;color: black;&quot;&gt;TestDataUtil&lt;/span&gt;.&lt;span style=&quot;font-style: italic;&quot;&gt;getJsonRequestString&lt;/span&gt;(filePath);&lt;span style=&quot;color: #8c8c8c; font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #8c8c8c; font-style: italic;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #9e880d;&quot;&gt;@When&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;I send a {string} request to {string}&quot;&lt;/span&gt;)&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;i_send_a_request_to&lt;/span&gt;(&lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;method, &lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;path) {&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;response &lt;/span&gt;= &lt;span style=&quot;color: #871094;&quot;&gt;requestSpec&lt;/span&gt;.contentType(&lt;span style=&quot;color: black;&quot;&gt;ContentType&lt;/span&gt;.&lt;span style=&quot;color: #871094; font-style: italic;&quot;&gt;JSON&lt;/span&gt;)&lt;br /&gt;                .body(&lt;span style=&quot;color: #871094;&quot;&gt;requestBody&lt;/span&gt;)&lt;br /&gt;                .when()&lt;br /&gt;                .request(method, path);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #9e880d;&quot;&gt;@Then&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;the response status code should be {int}&quot;&lt;/span&gt;)&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;the_response_status_code_should_be&lt;/span&gt;(&lt;span style=&quot;color: #0033b3;&quot;&gt;int &lt;/span&gt;statusCode) {&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;response&lt;/span&gt;.then().statusCode(statusCode);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/2653142524978841830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/using-feature-files-for-api-test-case-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/2653142524978841830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/2653142524978841830'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/using-feature-files-for-api-test-case-2.html' title='Using feature files for API test autimation - 2'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-4951603312451255001</id><published>2023-03-12T16:18:00.011-07:00</published><updated>2023-03-15T02:33:48.433-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API testing"/><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="RestAssured"/><title type='text'>Using feature files for API test autimation - 1</title><content type='html'>&lt;p&gt;I am usinng RestAssured for API test automation. Cucumber is used for mapping the feature scenarios with the implmentation. In other words we have use of gherkin language in feature files and replication of same in stepdefinitions which has my restAuured/java test implementations.&lt;/p&gt;&lt;p&gt;Since I am a fan of TestNG&#39;s capabilities I am extending AbstractTestNGCucmberTests.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Feature file&lt;/h4&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;Feature&lt;/span&gt;: Create User API&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;  &lt;span style=&quot;color: #0033b3;&quot;&gt;Scenario&lt;/span&gt;: Create User Successfully&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;Given &lt;/span&gt;the user payload is:&lt;br /&gt;      &lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;first_name    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;John   &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;last_name     &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;Doe    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;email         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;john.doe@example.com &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;mobile_phone  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1234567890 &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;date_of_birth &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;1990-01-01 &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password      &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;password &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;      | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;username      &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;johndoe &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;    When &lt;/span&gt;I send a {method} request to {path}&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;Then &lt;/span&gt;the response status code should be &lt;span style=&quot;color: #297bde;&quot;&gt;201&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;method  &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;path         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;status_code &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;    | &lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;POST    &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;/user_account/create&quot;&lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #297bde;&quot;&gt;201         &lt;/span&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;|&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;StepDefinitions&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To handle the payload, I am&amp;nbsp; using .replace method, where values in an existing jsom template is replaced with the data in exmaple table.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The helper class TestDataUtil, uses its updateJsonRequestString method to get us the payload. This is what is does;&lt;/div&gt;&lt;div&gt;First it reads the content of the json file. Then it replaces all the placeholders in it with the corresponding values in the data table. Also saves it as a String. The modified String is then written back to the json file. This updated json file is assigned to requestBody variable.&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;public class &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;CreateUserSteps &lt;/span&gt;{&lt;br /&gt;        &lt;span style=&quot;color: #0033b3;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;RequestSpecification &lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;requestSpec&lt;/span&gt;;&lt;br /&gt;        &lt;span style=&quot;color: #0033b3;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;Response &lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;response&lt;/span&gt;;&lt;br /&gt;        &lt;span style=&quot;color: #0033b3;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;requestBody&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #9e880d;&quot;&gt;@Given&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;the user payload is:&quot;&lt;/span&gt;)&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;the_user_payload_is&lt;/span&gt;(&lt;span style=&quot;color: black;&quot;&gt;Map&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: black;&quot;&gt;String&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;String&lt;/span&gt;&amp;gt; dataTable) {&lt;br /&gt;        &lt;span style=&quot;color: black;&quot;&gt;String requestBody &lt;/span&gt;= &lt;span style=&quot;color: black;&quot;&gt;TestDataUtil&lt;/span&gt;.update&lt;span style=&quot;font-style: italic;&quot;&gt;JsonRequestString&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;create_user.json&quot;&lt;/span&gt;)&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{first_name}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;first_name&quot;&lt;/span&gt;))&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{last_name}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;last_name&quot;&lt;/span&gt;))&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{email}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;email&quot;&lt;/span&gt;))&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{mobile_phone}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;mobile_phone&quot;&lt;/span&gt;))&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{date_of_birth}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;date_of_birth&quot;&lt;/span&gt;))&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{password}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;password&quot;&lt;/span&gt;))&lt;br /&gt;                .replace(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;{{username}}&quot;&lt;/span&gt;, dataTable.get(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;username&quot;&lt;/span&gt;));&lt;br /&gt;    }&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;div style=&quot;font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #9e880d;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;@When&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;I send a {string} request to {string}&quot;&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;i_send_a_request_to&lt;/span&gt;(&lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;method, &lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;path) {&lt;br /&gt;    &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #871094;&quot;&gt;response &lt;/span&gt;= &lt;span style=&quot;color: #871094;&quot;&gt;requestSpec&lt;/span&gt;.contentType(&lt;span style=&quot;color: black;&quot;&gt;ContentType&lt;/span&gt;.&lt;span style=&quot;color: #871094; font-style: italic;&quot;&gt;JSON&lt;/span&gt;)&lt;br /&gt;        &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;    .body(&lt;span style=&quot;color: #871094;&quot;&gt;requestBody&lt;/span&gt;)&lt;br /&gt;            &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;.when()&lt;br /&gt;            &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;.request(method, path);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;br /&gt;    &lt;span style=&quot;color: #9e880d;&quot;&gt;@Then&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;the response status code should be {int}&quot;&lt;/span&gt;)&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;the_response_status_code_should_b&lt;/span&gt;(&lt;span style=&quot;color: #0033b3;&quot;&gt;int &lt;/span&gt;expectedStatusCode) {&lt;br /&gt;            &lt;span style=&quot;color: #871094;&quot;&gt;response&lt;/span&gt;.then().statusCode(expectedStatusCode);&lt;br /&gt;    }&lt;br /&gt;    &lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/4951603312451255001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2023/03/using-feature-files-for-api-test-case-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4951603312451255001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/4951603312451255001'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2023/03/using-feature-files-for-api-test-case-1.html' title='Using feature files for API test autimation - 1'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-382157287213884129</id><published>2022-12-12T16:00:00.005-08:00</published><updated>2022-12-12T16:02:28.812-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><category scheme="http://www.blogger.com/atom/ns#" term="TestNG"/><title type='text'>Selenium - Configure TestNG to your Selenium framework.</title><content type='html'>To enable TestNG features in out test framework, as the first step we need to load the TestNG libraries to our test development environment(Eclipse).&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Go to mvnreposotory.com and type in &quot;testng&quot;in the search bar.&amp;nbsp;&lt;/li&gt;&lt;li&gt;In the search results, select the latest available for dependency version. At the time of writing this blog I got below 7.6.1 version.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Copy maven syntax for the dependency, so that we can paste it to our pom.xml.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Once copied append it to the pom.xml of your maven project (which the framework was being built.&lt;/li&gt;&lt;li&gt;Accordingly I added below to my pom.xml.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #888888;&quot;&gt;&amp;lt;!-- https://mvnrepository.com/artifact/org.testng/testng --&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.testng&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;testng&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.6.1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Also we need to install the testNG plugin to the IDE.

Go to Help &amp;gt;&amp;gt; Eclipse Market Place &amp;gt;&amp;gt; search for &quot;TestNG&quot;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ-VOUrxDtatpbUmMEhuouLFfFBfoLlsxAch1FNx96SAXmtlvQV3aBRmNBFIUKw04fAHWsqMW9-MKqU-mSJn28g9ZFHmGfM48jxHwuqN6451DO_R5HBx1c8uBl9SNkv0Mi2Lp4DvNoxeplfUHpqtu1n0q3et2qS-nRVEDIbP9to85HCGneqM0zMRjN/s1920/testNG1.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;1080&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ-VOUrxDtatpbUmMEhuouLFfFBfoLlsxAch1FNx96SAXmtlvQV3aBRmNBFIUKw04fAHWsqMW9-MKqU-mSJn28g9ZFHmGfM48jxHwuqN6451DO_R5HBx1c8uBl9SNkv0Mi2Lp4DvNoxeplfUHpqtu1n0q3et2qS-nRVEDIbP9to85HCGneqM0zMRjN/s320/testNG1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

Select to install the plugin and you are good.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/382157287213884129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/12/to-enable-testng-features-in-out-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/382157287213884129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/382157287213884129'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/12/to-enable-testng-features-in-out-test.html' title='Selenium - Configure TestNG to your Selenium framework.'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ-VOUrxDtatpbUmMEhuouLFfFBfoLlsxAch1FNx96SAXmtlvQV3aBRmNBFIUKw04fAHWsqMW9-MKqU-mSJn28g9ZFHmGfM48jxHwuqN6451DO_R5HBx1c8uBl9SNkv0Mi2Lp4DvNoxeplfUHpqtu1n0q3et2qS-nRVEDIbP9to85HCGneqM0zMRjN/s72-c/testNG1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-6200502632933558589</id><published>2022-12-01T04:04:00.002-08:00</published><updated>2022-12-01T04:10:12.719-08:00</updated><title type='text'>TestNG - files structure</title><content type='html'>&lt;div data-virtualparent=&quot;true&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-bnwqim&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1ro0kt6 r-18u37iz r-16y2uox r-1wbh5a2 r-1777fci&quot; data-rnw-media-class=&quot;4103-196__4101-_b1670-196&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1ro0kt6 r-16y2uox r-1wbh5a2 r-1vco6b3 r-9aemit&quot;&gt;&lt;div class=&quot;css-1dbjc4n&quot; data-rnw-media-class=&quot;4102-__4100&quot;&gt;&lt;div class=&quot;css-1dbjc4n&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-18u37iz r-1q142lx r-crgep1 r-qd89wu r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010&quot; data-key=&quot;initial_8dbyQUUt1Oeta0l295we_block&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010&quot; data-block-content=&quot;initial_8dbyQUUt1Oeta0l295we_block&quot;&gt;&lt;div class=&quot;css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8&quot; dir=&quot;auto&quot;&gt;&lt;span data-key=&quot;initial_8dbyQUUt1Oeta0l295we_text&quot;&gt;Structure of the TesNG.xml file consists elements as below.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8&quot; dir=&quot;auto&quot;&gt;&lt;br /&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;suite&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;test&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name =&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
         &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;test&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name =&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
     &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/suite&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div data-virtualparent=&quot;true&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-bnwqim&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1ro0kt6 r-18u37iz r-16y2uox r-1wbh5a2 r-1777fci&quot; data-rnw-media-class=&quot;4103-196__4101-_b1670-196&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1ro0kt6 r-16y2uox r-1wbh5a2 r-1vco6b3 r-9aemit&quot;&gt;&lt;div class=&quot;css-1dbjc4n&quot; data-rnw-media-class=&quot;4102-__4100&quot;&gt;&lt;div class=&quot;css-1dbjc4n&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-18u37iz r-1q142lx r-crgep1 r-qd89wu r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010&quot; data-key=&quot;5223b5b1f86e4e6194c987ee99297faf&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010&quot; data-block-content=&quot;5223b5b1f86e4e6194c987ee99297faf&quot;&gt;&lt;div class=&quot;css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8&quot; dir=&quot;auto&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span data-key=&quot;041277fab6a444a1a64cb822fe1196d7&quot;&gt;Each testNG xml pockets its content within the parent &amp;lt;suite&amp;gt; tags.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span data-key=&quot;041277fab6a444a1a64cb822fe1196d7&quot;&gt;test tags is the next main level and you can have many test tags. These specify the module.  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span data-key=&quot;5b441cb93c4e40b1b32442bff2855bfb&quot;&gt;classes comes next. This helps goup the many classes you have under a certain test module&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span data-key=&quot;ccb7876267e14f6cb814929754aa79d3&quot;&gt;class is the smallest element which carries the class name.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Example of a sample TestNG is as below;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 
  
  
  &lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #557799;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #557799;&quot;&gt;&amp;lt;!DOCTYPE suite SYSTEM &quot;http://testng.org/testng-1.0.dtd&quot;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;suite&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;parallel=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;tests&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;ShoppingCart&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;

  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;test&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;thread-count =&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;5&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Submit Order Tests&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
      &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;learningspace.tests.SubmitOrderTest&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/classes&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
  
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;test&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;thread-count =&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;5&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Error Validation Tests&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;classes&amp;gt;&lt;/span&gt;
      &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;learningspace.tests.ErrorValidationTests&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/classes&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
  
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/suite&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

  
  &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div data-slate-fragment=&quot;JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMlN0cnVjdHVyZSUyMG9mJTIwdGhlJTIwVGVzTkcueG1sJTIwZmlsZSUyMGNvbnNpc3RzJTIwZWxlbWVudHMlMjBhcyUyMGJlbG93LiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmNmMjYwNGVhNTQ2ZDQxNWNhNjQxYmIyN2EwMGFiNTBmJTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNjY4YmMwM2RkMzQyNDE0NWE1NmNhODhkZTkxMGQwZWMlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTIyc3ludGF4JTIyJTNBJTIyeG1sJTIyJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUzQ3N1aXRlJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyOWVhODYwOGQwNzQ4NDkzZGJlYTMwYzZjZjE1NmI0N2MlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIwMmUzODlmODU0ZGI0YzkxYmM5NTVlZDI5YzhlOWQ3NCUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiUyMmhpZ2hsaWdodGVkJTIyJTNBdHJ1ZSU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyOWM1YjUzMjVjMWRmNDJjNWJkZmJlMjZiYzI2OWYyYmElMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI3NjkxNDNlZTg5M2Q0MDE3YTI4Yzc5MDczNmNkZDgzMiUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiUyMmhpZ2hsaWdodGVkJTIyJTNBdHJ1ZSU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTNDdGVzdCUyMG5hbWUlMjAlM0QlMjAlNUMlMjIlNUMlMjIlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJjODYwN2Q4OTgzNzA0MzNhYjQ5ZjhiYjYwMGIzYTEwOSUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjc4Y2E4NTVmZDkwMzQ2MTY5NmNmNDE0OTBkYjNhZmRmJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTIyaGlnaGxpZ2h0ZWQlMjIlM0F0cnVlJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NjbGFzc2VzJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyMmQ4NGU4NGNmNmNlNDNhOWFlNmQzYjY1MGQ4N2Q3ZDglMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI2MGI3NGExMjM5ZTk0Zjg4ODI5MGY2MzIyMjU2MjNhZCUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiUyMmhpZ2hsaWdodGVkJTIyJTNBdHJ1ZSU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDY2xhc3MlMjBuYW1lJTNEJTVDJTIyJTVDJTIyJTIwJTJGJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNTE2OWY5NDg4YzI4NGViNjkzZmRiNDc5NmUyNTE2N2QlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI1YzRiYzYyZmUyZmU0MmI3YmZlMmI3MTg1ZDM2NWVhNSUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiUyMmhpZ2hsaWdodGVkJTIyJTNBdHJ1ZSU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDY2xhc3NlcyUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmVjMGFjOTIxZDI0ZjQ0Zjk5MjcyYTViYjlmMDRhNjAzJTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyY2U2NGRjMzAzNzlhNDIyODhjZGQ0ODE1OTlmZGMwZGIlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlMjJoaWdobGlnaHRlZCUyMiUzQXRydWUlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCUzQyUyRnRlc3QlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJlMjg3YWJkNGVmZjY0OGYyYTFjZjMyNTI2Y2ZjOGRmNyUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmZmN2ZkNzE3NTk3MTRlNDU4ZGZjZmY3NGIyNzlmODYyJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJmYTEzZTk1MWZiMDY0YmI3YTQwYzMzM2U3Y2ZiMTBjYSUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmZhZDE0ODQyNDdkYzQ5ZGZhOTc3ZWZhYTFhYzEzOWNlJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlM0N0ZXN0JTIwbmFtZSUyMCUzRCUyMCU1QyUyMiU1QyUyMiUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmI2ZGYxNzZjMjQ5MTQzYmFhMmQ5ZGZhNGIyMmI4ZTY5JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyYzFhNzJkNWYyMzJiNDYzMWE5NThjNGNjZTZhZTA3OGMlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2NsYXNzZXMlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJmNWRjZDI4MDE2ODc0NDY1ODJhMjZmZjgwMDhiNjdhOCUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmY3YmMyM2E3MWI3ZDQ0NWFhNjdmY2E3ZjYzZDA0OTg1JTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NjbGFzcyUyMG5hbWUlM0QlNUMlMjIlNUMlMjIlMjAlMkYlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI2ZmNlNDZjMGU5YTg0MmRlYjBiMWM0NWQ5ZjFiYjZjYiUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmE2MjhmODQ0NjExZTQ4YzBiOTg3ZWNlOGEwMzE3Y2IyJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NjbGFzc2VzJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyZmJkMDcxMDdhYjNjNGJhNmJhYmQwYmViYjllMjk4YzAlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI0ZGYxNGMwNTcyYjQ0Y2I5YjA4OTVhMjAzYzE1NjI2ZSUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTNDJTJGdGVzdCUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjhlZTU5YWQ1OTYzMjRmZjhhOTE0YmZlNWE3Mzg5YTg5JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNGM1MzNhMjgwN2Q3NDQ2NTk5MWFjODMwYmEwMTdiOTUlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmY0ZDhmMGM1ZDUxMzRjZjNhMjlkZmIwZjJmMDkyM2E5JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNGM4Mzk4NWQwNGI2NGE1Nzg4NDZlZjI3Y2NmMDIwNDclMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUzQyUyRnN1aXRlJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyMTIyZWFlYzZjY2FhNGQ5YWEwMjAxZTc1MDBhNDI4ZmElMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIxNzViNzNhYjk5MTc0YjRlOTg0NzkzOTJiZmNlNGE3MCUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjU3ZTQ2YjM1ZWFkMzQ0MGZiNTQwOTQwYmVmZDE0MDkxJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIycGFyYWdyYXBoJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJFYWNoJTIweG1sJTIwcG9ja2V0cyUyMGl0cyUyMGNvbnRlbnQlMjB3aXRoaW4lMjBwYXJlbnQlMjBzdWl0ZSUyMHRhZ3MuJTIwJTIwaS5lJTIwJTNDc3VpdGUlM0UlMjAlM0MlMkZzdWl0ZSUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmNhYjc2ZDcyNDBkNDRkMzliYmQyNmE4MTFkZjllNmQ4JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNTIyM2I1YjFmODZlNGU2MTk0Yzk4N2VlOTkyOTdmYWYlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMnRlc3QlMjB0YWdzJTIwaXMlMjB0aGUlMjBuZXh0JTIwbWFpbiUyMGxldmVsJTIwYW5kJTIweW91JTIwY2FuJTIwaGF2ZSUyMG1hbnklMjB0ZXN0JTIwdGFncy4lMjBUaGVzZSUyMHNwZWNpZnklMjB0aGUlMjBtb2R1bGUuJTIwJTIwJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyMDQxMjc3ZmFiNmE0NDRhMWE2NGNiODIyZmUxMTk2ZDclMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJlZjU3ZGVkY2M5MTQ0MTdkYjQzOTllNGE0M2ZmY2JhZiUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyY2xhc3NlcyUyMGNvbWVzJTIwbmV4dC4lMjBUaGlzJTIwaGVscHMlMjBnb3VwJTIwdGhlJTIwbWFueSUyMGNsYXNzZXMlMjB5b3UlMjBoYXZlJTIwdW5kZXIlMjBhJTIwY2VydGFpbiUyMHRlc3QlMjBtb2R1ZSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjViNDQxY2I5M2M0ZTQwYjFiMzI0NDJiZmYyODU1YmZiJTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyZTc4YzRmODg0OGY5NDY1ZTg1OWEwYTJjODZiZTA4ODglMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMmNsYXNzJTIwaXMlMjB0aGUlMjBzbWFsbGVzdCUyMGVsZW1lbnQlMjB3aGljaCUyMGNhcnJpZXMlMjB0aGUlMjBjbGFzcyUyMG5hbWUuJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyY2NiNzg3NjI2N2UxNGY2Y2I4MTQ5Mjk3NTRhYTc5ZDMlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIzNWZkODk3ODk3YzE0ODQzOGRmZTZmM2VlZjBkN2NkYyUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyRXhhbXBsZXMlMjBvZiUyMGElMjBzaW1wbGUlMjBUZXN0TkclMjBpcyUyMGJlbG93JTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyM2YzNDhmZDFkMDdhNGZlM2E0ZmI5YTFlOGE0OTA2MDElMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI5NDRmODUxNmI4ZWU0ZThhOTllYzJjMzQ0Y2ViY2RkOSUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlMjJzeW50YXglMjIlM0ElMjJ4bWwlMjIlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTNDJTNGeG1sJTIwdmVyc2lvbiUzRCU1QyUyMjEuMCU1QyUyMiUyMGVuY29kaW5nJTNEJTVDJTIyVVRGLTglNUMlMjIlM0YlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJhMDliNDA5ZWNmNTM0YTg3YTJiOTdjZGM2YjU3NGM5YiUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjMzNDBhNDRmZWY0YzRhMmFiNmM0MjZlNmY4ZDRhMTVhJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlM0MhRE9DVFlQRSUyMHN1aXRlJTIwU1lTVEVNJTIwJTVDJTIyaHR0cCUzQSUyRiUyRnRlc3RuZy5vcmclMkZ0ZXN0bmctMS4wLmR0ZCU1QyUyMiUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjIzZTdmMmVjNzA2ZjRhNWJiNDkyYjk3Nzk1ODAyYjA4JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyOWJkOGJmZjVjMDRiNDRkZGE0NTg0YzE1NGQ2Y2MwYzQlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUzQ3N1aXRlJTIwcGFyYWxsZWwlM0QlNUMlMjJ0ZXN0cyU1QyUyMiUyMG5hbWUlM0QlNUMlMjJTaG9wcGluZ0NhcnQlNUMlMjIlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIxMzVjMjNiZWJiODc0YjBjOWIwZjk1OWFiNzk2MjU2YiUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjg2ODFkMzczODI3MTRkYjI5ZDhiMDBhYzdhZTg5Nzc3JTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJmMDM2MDcxMWE1MDI0MWUxYjNhNzI2NjkzY2ZhMzk2ZSUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjYwZDFjMzJiM2RjNTRjOTRiZTdhNDI3ZGM2NTg5OTZhJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlM0N0ZXN0JTIwdGhyZWFkLWNvdW50JTIwJTNEJTVDJTIyNSU1QyUyMiUyMG5hbWUlM0QlNUMlMjJTdWJtaXQlMjBPcmRlciUyMFRlc3RzJTVDJTIyJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyYWQzNDMyZjc4NzVmNDliM2IzOTRmNGY0MDRjN2FiOTUlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIwMjMwZWE5NDM0MzU0ZjFhOTVmM2M5NzhhMGEzYmU2MCUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTNDY2xhc3NlcyUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmZjY2JkNjI4NzFhMDQ5YmRhYjQxY2Q0NDg1NWFhYzk2JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyMDQ2YmI5MTlkMDUyNGViY2E5MzM1NjBkMTUyZjhjOTglMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCUyMCUyMCUzQ2NsYXNzJTIwbmFtZSUzRCU1QyUyMmxlYXJuaW5nc3BhY2UudGVzdHMuU3VibWl0T3JkZXJUZXN0JTVDJTIyJTJGJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyMTVjNmE2Y2JlNjk1NDk3MWIwYTNlMzhlOTY1YzYzMzYlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJmYTVjMTU4YTA0NzA0ZWFlODA1ZDdiNmRkOTYwYTA4ZSUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTNDJTJGY2xhc3NlcyUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmU5MTQwOTRkOGYxNzRiZTY4OWM3YzRlYWMzOTNiNzRhJTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyMWM0OGI0MzhjYzdjNGM2OGI0NzE3ODRlM2VmMDliOGQlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUzQyUyRnRlc3QlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJiZDNmOWVmNmI0ZWE0MDUwYTI5NjI0MGNlODMxYWExYyUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjY1NjUzNmJmY2FkMjRkMjliZmZlZmU5NjhkZTgzODhmJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIzYTI5NDUwZTRhOWU0MDZlYWI2ODM0ODc3ZDY2ZmRiNiUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjU4OGFjNjUxNWE4NTQ4ZWI5YjdkZGQ0MmJhZTVkYjVjJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlM0N0ZXN0JTIwdGhyZWFkLWNvdW50JTIwJTNEJTVDJTIyNSU1QyUyMiUyMG5hbWUlM0QlNUMlMjJFcnJvciUyMFZhbGlkYXRpb24lMjBUZXN0cyU1QyUyMiUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjU5NmI0MWQxNWRjZjRjNGE4ZWVhNTMzY2E5OGNjMmE3JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyNmI3NGE0YWE5OGJmNDJiNzlkYWE0NDM1MDZjN2QxNmIlMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCUzQ2NsYXNzZXMlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJmZmJhYzRmYmI1NDY0ZmM1ODZlYTlhZWE4M2U4ZmM2YyUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjAzNzE1N2FhODUyMjQwMjNiNThmY2MxZTYzM2FjNzA2JTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlMjAlMjAlM0NjbGFzcyUyMG5hbWUlM0QlNUMlMjJsZWFybmluZ3NwYWNlLnRlc3RzLkVycm9yVmFsaWRhdGlvblRlc3RzJTVDJTIyJTJGJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlMkMlMjJzZWxlY3Rpb25zJTIyJTNBJTVCJTVEJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyOWViY2UzNTAxMTVlNDdiMmFmY2I0MjRmZGM0Nzk1MjclMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjJhZmRmNGI2ZTk5YjM0ODkzOWUxY2U4YThmNTVmZGMxNyUyMiU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUtbGluZSUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTNDJTJGY2xhc3NlcyUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjU3MTVmNzU5NWZlYTRhM2FhZmQyNTVhMDA4NjJmMTI1JTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyN2RmYjg4ZWJlMzA0NDRjZWE1NjVjMWU4OGNmOTc2ZmElMjIlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlLWxpbmUlMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUzQyUyRnRlc3QlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI5MDkwNGY1YmYzMmU0MTZkYmEzNzUwNTJkNmNkOGY1NSUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjEzZjgxYTEwOTRlMTRlYmY5NDE2MWIxYzhlODM5NTM2JTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCUyQyUyMnNlbGVjdGlvbnMlMjIlM0ElNUIlNUQlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjI0NTQ4ODIxZGE2NGU0MTM5YjA0NGI3MGIyNzQxOGY0ZiUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMmQ5MDE2NTIyZmM2NjQ5ZTU4ZGI5NTc0NDA4YTBiNzZiJTIyJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZS1saW5lJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIybGVhdmVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlM0MlMkZzdWl0ZSUzRSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTJDJTIyc2VsZWN0aW9ucyUyMiUzQSU1QiU1RCU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjc5NmIwOTM1ODcyNzQzOGVhNzQ0MTc5NjUwNzg3YzUxJTIyJTdEJTVEJTJDJTIya2V5JTIyJTNBJTIyODVlOTk3ZjE0ZWExNDUyOTk0ZWFhMTA2YmUxNzRlM2MlMjIlN0QlNUQlMkMlMjJrZXklMjIlM0ElMjIxOTEyZTIwYmM1NjQ0YmYxODA5NTc4NWI0YjE2ODJhYSUyMiU3RCU1RCUyQyUyMmtleSUyMiUzQSUyMjkxZGMyMjg0YWY4YTQ4N2M4NGE2MzQ1YTQ3MjU1Nzc1JTIyJTdE&quot; data-virtualparent=&quot;true&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-bnwqim&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1ro0kt6 r-18u37iz r-16y2uox r-1wbh5a2 r-1777fci&quot; data-rnw-media-class=&quot;4103-196__4101-_b1670-196&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1ro0kt6 r-16y2uox r-1wbh5a2 r-1vco6b3 r-9aemit&quot;&gt;&lt;div class=&quot;css-1dbjc4n&quot; data-rnw-media-class=&quot;4102-__4100&quot;&gt;&lt;div class=&quot;css-1dbjc4n&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-18u37iz r-1q142lx r-crgep1 r-qd89wu r-ifefl9 r-bcqeeo r-t60dpp r-1l7z4oj r-95jzfe r-1yzf0co r-bnwqim r-417010&quot; data-key=&quot;1912e20bc5644bf18095785b4b1682aa&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010&quot; data-block-content=&quot;1912e20bc5644bf18095785b4b1682aa&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-1vckr1u r-z2wwpe r-bnwqim&quot; data-rnw-int-class=&quot;codeblock-toolbar____&quot;&gt;&lt;div class=&quot;r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-1dqxon3 r-t60dpp r-5njf8e r-bnwqim r-417010&quot; spellcheck=&quot;false&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-2awvau&quot;&gt;&lt;div class=&quot;css-1dbjc4n r-6koalj r-18u37iz&quot;&gt;&lt;div class=&quot;css-901oao r-1nf4jbm r-uibjmv r-1b43r93 r-majxgm r-hbpseb r-1v6e3re r-i023vh r-1xnzce8 r-yrgyi6&quot; dir=&quot;auto&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/6200502632933558589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/12/testng-files-structure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6200502632933558589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6200502632933558589'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/12/testng-files-structure.html' title='TestNG - files structure'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-7607475079020089024</id><published>2022-11-20T13:30:00.004-08:00</published><updated>2022-11-20T13:31:40.164-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><title type='text'>Beginners spot - Pushing your work to GitHub</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1. Login to your GitHub account and create the repo&lt;/p&gt;&lt;p&gt;2. Go to command prompt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;git config --global user.name &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;yumani&quot;&lt;/span&gt;

git config --global user.email &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;yumani@gmail.com&quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3. Navigate to the location of the local repo and use the below commands.&amp;nbsp;&lt;/p&gt;&lt;p&gt;It will initialize the repo, add the files and push to the origin with the comments.&lt;/p&gt;&lt;p&gt;
  &lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;git init

git add *

git status

git commit -m &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Adding the initial file set&quot;&lt;/span&gt;

git remote add origin https://github.com/yumaniranaweera/snuggery.git

git push origin master
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;4. You can import the files structure to your Eclipse editor from &quot;File &amp;gt;&amp;gt; Import&amp;gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1n2GdBpkGi0uolUZMqr-NCMV-GaMM8ERpTXB4mrnesUE4fK45uG6BpcrzvKrgI-VSu34re2PWOCcQ5h0hjE5hGv1tUob0QZF9_C-tbGEL0kdOP9DDOv_GrE2pzXH8XGinn5jThubYOldGaU7KPbWnP1kBVeAyD3Sw2BD5szc3kKysNvsmWvt7bQsg/s694/temp.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;556&quot; data-original-width=&quot;694&quot; height=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1n2GdBpkGi0uolUZMqr-NCMV-GaMM8ERpTXB4mrnesUE4fK45uG6BpcrzvKrgI-VSu34re2PWOCcQ5h0hjE5hGv1tUob0QZF9_C-tbGEL0kdOP9DDOv_GrE2pzXH8XGinn5jThubYOldGaU7KPbWnP1kBVeAyD3Sw2BD5szc3kKysNvsmWvt7bQsg/s320/temp.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/7607475079020089024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/beginners-spot-pushing-your-work-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/7607475079020089024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/7607475079020089024'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/beginners-spot-pushing-your-work-to.html' title='Beginners spot - Pushing your work to GitHub'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1n2GdBpkGi0uolUZMqr-NCMV-GaMM8ERpTXB4mrnesUE4fK45uG6BpcrzvKrgI-VSu34re2PWOCcQ5h0hjE5hGv1tUob0QZF9_C-tbGEL0kdOP9DDOv_GrE2pzXH8XGinn5jThubYOldGaU7KPbWnP1kBVeAyD3Sw2BD5szc3kKysNvsmWvt7bQsg/s72-c/temp.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-6092038187756455920</id><published>2022-11-15T16:18:00.006-08:00</published><updated>2022-11-18T12:42:07.422-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Maven"/><category scheme="http://www.blogger.com/atom/ns#" term="TestNG"/><title type='text'>Beginners Spot  - Setup Maven in Test Automation environment </title><content type='html'>&lt;p&gt;1)&amp;nbsp; Install Maven&amp;nbsp; (Windows)&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Download from maven website and unzip the file.&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Set MAVEN_HOME -&amp;nbsp; &amp;lt;base dire&amp;gt;\apache-maven-3.8.6&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Add to path -&amp;nbsp; &amp;lt;base dire&amp;gt;\apache-maven-3.8.6\bin&lt;/p&gt;&lt;p&gt;2) Test the installation&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Open cmd and type mvn --version&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Should return maven home, version etc.&lt;/p&gt;&lt;p&gt;3) Create a maven project in Eclipse ( You can use maven-quickstart-archetype)&lt;/p&gt;&lt;p&gt;4) Integrate to Eclipse&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Apply Maven Surefire plugin to Eclipse.&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp; Go to Maven Surefire plugin page &amp;gt;Usage (https://maven.apache.org/surefire/maven-surefire-plugin/usage.html)&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Copy the plugin management snippet and paste in the pom.xml in your eclipse project.&lt;/p&gt;&lt;ol class=&quot;linenums&quot; style=&quot;color: #333333; font-family: Monaco, Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; margin: 0px 0px 0px 25px; padding: 0px 0px 0px 15px; white-space: pre-wrap;&quot;&gt;&lt;li class=&quot;L2&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;build&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L3&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;pluginManagement&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L4&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L5&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L6&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;org.apache.maven.plugins&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L7&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;maven-surefire-plugin&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L8&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;3.0.0-M7&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L9&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L0&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L1&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/pluginManagement&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L2&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Paste this above your dependencies section in the pom.xml.&lt;/p&gt;&lt;p&gt;&amp;nbsp;- now you can run mvn clean, mvn test commands.&lt;/p&gt;&lt;p&gt;5) Integrate TestNG&lt;/p&gt;&lt;p&gt;&amp;nbsp;- We need to add an additional configuration to the plugins section in the pom.xml&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Go to&amp;nbsp;https://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html&lt;/p&gt;&lt;ol class=&quot;linenums&quot; style=&quot;color: #333333; font-family: Monaco, Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; margin: 0px 0px 0px 25px; padding: 0px 0px 0px 15px; white-space: pre-wrap;&quot;&gt;&lt;li class=&quot;L6&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L7&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;suiteXmlFiles&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L8&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;suiteXmlFile&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;testng.xml&lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/suiteXmlFile&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L9&quot; style=&quot;background: rgb(238, 238, 238); color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/suiteXmlFiles&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;L0&quot; style=&quot;color: #404040; line-height: 20px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: black;&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;tag&quot; style=&quot;color: #000088;&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;- Also you need to add the TestNG dependency to the pom.xml, if its not already added.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/6092038187756455920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/maven-cheat-sheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6092038187756455920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6092038187756455920'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/maven-cheat-sheet.html' title='Beginners Spot  - Setup Maven in Test Automation environment '/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-8924540100808866661</id><published>2022-11-12T13:33:00.002-08:00</published><updated>2022-11-27T11:09:26.775-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><title type='text'>Selenium - Explicit wait</title><content type='html'>&lt;p&gt;&amp;nbsp;This post is not about explicit wait concept in Selenium. But about how we could convert standard explicit wait command to an action method.&lt;/p&gt;&lt;p&gt;So our standard command set is like this:&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;	WebDriverWait wait &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; WebDriverWait&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;Duration&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;ofSeconds&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
	wait&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;until&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ExpectedConditions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;visibilityOfAllElementsLocatedBy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;cssSelector&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;.mb-3&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)));&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets make the action class;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;waitExplicity&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By findBy&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
	WebDriverWait wait &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; WebDriverWait&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; Duration&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;ofSeconds&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
	wait&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;until&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;ExpectedConditions&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;visibilityOfAllElementsLocatedBy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;findBy&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;																									
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a reusable method and therefore we should maintain it within the Abstract Components of our test framework.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(btw, hope you noticed the By locator being sent into wait.until as a parameter. The child class which will be extending the AbstractComponent class should set the value for this.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/8924540100808866661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-explicit-wait.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8924540100808866661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/8924540100808866661'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-explicit-wait.html' title='Selenium - Explicit wait'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-508525918879825211</id><published>2022-11-12T08:20:00.007-08:00</published><updated>2022-11-12T08:27:51.658-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Action Classes"/><category scheme="http://www.blogger.com/atom/ns#" term="Page Object Model"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><title type='text'>Selenium - POM and Action Methods - 2</title><content type='html'>&lt;p&gt;&amp;nbsp;Lets check how the below segment can be changed to page object model.&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;1
2
3
4
5
6&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;WebElement&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; products &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElements&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;cssSelector&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;.mb-3&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;	

WebElement prod &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;products&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;stream&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;product&lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt;
product&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;cssSelector&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productName&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findFirst&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;orElse&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

prod&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;//div[@class=&#39;card-body&#39;]/button[2]&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Lets take the web element descriptions first; Here we are locating a products list (findElements by the classname csslocator). Since its a list we make it of the type List&amp;lt;WebElement&amp;gt; (line 1). This is how it is done by using @FindBy (we discussed in&amp;nbsp;&lt;a href=&quot;https://yumani.blogspot.com/2022/11/selenium-page-object-model-and-action.html&quot;&gt;part 1&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@FindBy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;css &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;.mb-3&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;WebElement&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; products&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Afterwards we can do an action class to findElements. I have called a wait method from the abstract components. You can ignore that for the moment. --&lt;i&gt; let&#39;s not distract ourselves with that in this post peepsies ..&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;WebElement&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getProductList&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(){&lt;/span&gt;
	waitExplicity&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productBy&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; products&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Next (line 3-4) we go through the list and filter the product which matches the product name that we specify through a String. This is how it is converted to an action method.&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; WebElement &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getProductByName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String productName&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
	WebElement prod &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;getProductList&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;stream&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;product&lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt;
	product&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;cssSelector&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productName&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findFirst&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;orElse&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; prod&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Let me add bit of details here; If you look at the line 3 of our first code snippet, the stream filter results are assigned to a variable called prod. How is the prod extracted? By traversing though the products, which is the list of products. With me? ook one step ahead-&lt;/p&gt;&lt;p&gt;How do we get the products from our POM &amp;amp; Action Methos approach? via the getProductList action method.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So that&#39;s what we have done above. We have getProductList().stream().filter .... instead previous products.stream().filter ....&lt;/p&gt;&lt;p&gt;Now next is the fun part! See what we do when we do addToCart.&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;addToCart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String productName&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
		WebElement chosenProduct &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getProductByName&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productName&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
		chosenProduct&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;addtoCartBtn&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;We use getProductByName(productName) and assign the returning WebElement to &#39;chosenProduct&#39; variable.&amp;nbsp; same concept as above. The list web element is replaced by the action method that we created to get the list webelement.&lt;/p&gt;&lt;p&gt;In the next line we do a findElement from within the chosenProduct context, not driver context (noticed!) This is not POM struff. Its about how Selenium facilitate different locator contexts.&lt;/p&gt;&lt;p&gt;However, we cannot use the elements defined in POM to other context. Only driver context could use them. So we have to use the long By.locator methods or we could defined them separately and use here. See.. notice the line 1 below.&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;By addtoCartBtn &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;//div[@class=&#39;card-body&#39;]/button[2]&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;addToCart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String productName&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
	WebElement chosenProduct &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getProductByName&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productName&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	chosenProduct&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;addtoCartBtn&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt; &lt;span style=&quot;color: #888888;&quot;&gt;//You cannot use Page objects when you are using a WebElement context&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;So that&#39;s about what I learnt on this.. See below for the connected code.&lt;/p&gt;&lt;p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/p&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;        &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@FindBy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;css &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;.mb-3&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
	List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;WebElement&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; products&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

	&lt;span style=&quot;color: #888888;&quot;&gt;//WebElements defined under By type to be used in WebElement context. &lt;/span&gt;
	&lt;span style=&quot;color: #888888;&quot;&gt;//You can use POs only in driver context&lt;/span&gt;
	By productBy &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;cssSelector&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;.mb-3&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	By addtoCartBtn &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;//div[@class=&#39;card-body&#39;]/button[2]&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	
	&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;WebElement&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getProductList&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(){&lt;/span&gt;
		waitExplicity&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productBy&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; products&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; WebElement &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getProductByName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String productName&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
		WebElement prod &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;getProductList&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;stream&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;product&lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt;
		product&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;cssSelector&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productName&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findFirst&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;orElse&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; prod&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;addToCart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String productName&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
		WebElement chosenProduct &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getProductByName&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;productName&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
		chosenProduct&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;addtoCartBtn&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/508525918879825211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-pom-and-action-methods-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/508525918879825211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/508525918879825211'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-pom-and-action-methods-2.html' title='Selenium - POM and Action Methods - 2'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-6909901834572186756</id><published>2022-11-12T04:53:00.012-08:00</published><updated>2022-11-12T06:04:04.346-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Action Classes"/><category scheme="http://www.blogger.com/atom/ns#" term="Page Object Model"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><title type='text'>Selenium - Page Object Model and Action Methods</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;How we change this code to PageObjectModel and action classes.&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;1
2
3&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;userEmail&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;testA1@gmail.com&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;userPassword&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;testA1#&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
driver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Page Objects&lt;/b&gt;&lt;/p&gt;&lt;p&gt;We can convert the locators&amp;nbsp; to Page Objects this way&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #888888;&quot;&gt;/*	Page Objects Model*/&lt;/span&gt;
	&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@FindBy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;id&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;userEmail&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
	WebElement useremail&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
		
	&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@FindBy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;id&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;userPassword&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
	WebElement userpass&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
		
	&lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@FindBy&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;id&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
	WebElement login&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;u&gt;How do we do it&lt;/u&gt;&lt;/p&gt;&lt;p&gt;1- Use &lt;span style=&quot;background-color: #fff2cc;&quot;&gt;@FindBy&lt;/span&gt; from&amp;nbsp;&lt;span style=&quot;color: #2b00fe;&quot;&gt;org.openqa.selenium.By&lt;/span&gt; in Selenium. Consider this is replacing &quot;&lt;span style=&quot;background-color: #d9ead3;&quot;&gt;driver.findElement(By&lt;/span&gt;&quot; in our standard way of locating elements.&amp;nbsp;&lt;/p&gt;&lt;p&gt;2- Next put the locator type; id, css, xpath, classname etc&lt;/p&gt;&lt;p&gt;3- Add the relative value next to the locator type. For an example, if you choose &#39;id&#39; as the locator type, you should get the &#39;id&#39; of the element. In my case the id of the element that I chose is &#39;userEmail&#39;. So I build my line like this; &lt;span style=&quot;color: #2b00fe;&quot;&gt;@FindBy(id=&quot;userEmail&quot;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4- That&#39;s not all; We need to let Selenium know what the web element is. So add this.&lt;/p&gt;&lt;p&gt;WebElement &amp;lt;element&amp;gt;. In my case &lt;span style=&quot;color: #2b00fe;&quot;&gt;WebElement username&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;5- So it makes up our page objects this way;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white; color: #2b00fe;&quot;&gt;@FindBy(id=&quot;userEmail&quot;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white; color: #2b00fe;&quot;&gt;WebElement userName;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Action Classes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;As action we input username, pass and press login button. I will show you how these can be segmented out to an action class;&lt;/p&gt;
&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;Login&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String email&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String pass&lt;span style=&quot;color: #333333;&quot;&gt;){&lt;/span&gt;
	useremail&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;email&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	userpass&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;pass&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
	login&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I think you can easily see how we have used each of the above page objects to action.&lt;/p&gt;&lt;p&gt;eeasy ha !! wait for more cool stuffs peeps :)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/6909901834572186756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-page-object-model-and-action.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6909901834572186756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6909901834572186756'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-page-object-model-and-action.html' title='Selenium - Page Object Model and Action Methods'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-2569034758582483677</id><published>2022-11-04T14:02:00.012-07:00</published><updated>2022-11-12T09:15:32.213-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Action Classes"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><title type='text'> Selenium - Composite Actions</title><content type='html'>&lt;p&gt;Amazing piece that I learnt today; Composite actions. Its a concept in which you carry several action commands within one line of Selenium code.&lt;/p&gt;&lt;p&gt;For an example, un the below syntax I perform these actions;&lt;/p&gt;&lt;p&gt;move to the search bar, press it, hold down shift key and enter a text and then double-clicking on the text.&lt;/p&gt;&lt;p&gt;So how is it done.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We have used the &quot;Actions&quot; class within &lt;span style=&quot;color: #2b00fe;&quot;&gt;org.openqa.selenium.interactions.Actions.&lt;/span&gt; 
  
  &lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;Actions a &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold&quot;&gt;new&lt;/span&gt; Actions&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;driver&lt;span style=&quot;color: #333333&quot;&gt;);&lt;/span&gt;
WebElement caps &lt;span style=&quot;color: #333333&quot;&gt;=&lt;/span&gt; driver&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;findElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;By&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;//input[@id=\&amp;quot;twotabsearchtextbox\&amp;quot;]&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;));&lt;/span&gt;
a&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;moveToElement&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;caps&lt;span style=&quot;color: #333333&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;clickAndHold&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;keyDown&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;Keys&lt;span style=&quot;color: #333333&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;SHIFT&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;sendKeys&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;iphoneX&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;doubleClick&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000CC&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color: #333333&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It supports many actions such as below&amp;nbsp;&lt;/p&gt;&lt;p&gt;clickAndHold().&lt;/p&gt;&lt;p&gt;keyDown(Keys).&lt;/p&gt;&lt;p&gt;sendKeys(&quot;iphoneX&quot;)&lt;/p&gt;&lt;p&gt;doubleClick()&lt;/p&gt;&lt;p&gt;Once you have selected the action classes required for your test, in Selenium Java you need to end the command with&amp;nbsp;.build().perform();&amp;nbsp;&lt;/p&gt;&lt;p&gt;Complete code is as below;&lt;/p&gt;
    &lt;script src=&quot;https://gist.github.com/yumaniranaweera/aa24bd147cf0a1272aaa7673adac5021.js&quot;&gt;&lt;/script&gt;
&lt;noscript&gt;
package tests;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

import io.github.bonigarcia.wdm.WebDriverManager;

public class ActionsAjaxandMouseInterations {

	public static void main(String[] args) {
		WebDriverManager.chromedriver().setup();
		WebDriver driver = new ChromeDriver();
		driver.get(&quot;https://amazon.com/&quot;);
		Actions a = new Actions(driver);
		
		WebElement move = driver.findElement(By.xpath(&quot;//a[@id=\&quot;nav-link-accountList\&quot;]&quot;));
		WebElement caps = driver.findElement(By.xpath(&quot;//input[@id=\&quot;twotabsearchtextbox\&quot;]&quot;));
		/* Move the mouse over to an element */
		a.moveToElement(move).build().perform();
		
		/* Enter text in Caps */
		a.moveToElement(caps).clickAndHold().keyDown(Keys.SHIFT).sendKeys(&quot;hello&quot;).build().perform();
		
		/* Enter in caps and select */
		a.moveToElement(caps).clickAndHold().keyDown(Keys.SHIFT).sendKeys(&quot;iphoneX&quot;).doubleClick().build().perform();
	}

}
&lt;/noscript&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/2569034758582483677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-composite-actions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/2569034758582483677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/2569034758582483677'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/selenium-composite-actions.html' title=' Selenium - Composite Actions'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-845175847412507418</id><published>2022-11-04T14:02:00.011-07:00</published><updated>2022-11-12T09:14:58.416-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><category scheme="http://www.blogger.com/atom/ns#" term="xpath"/><title type='text'>Selenium - Xpath Locators</title><content type='html'>1. By Tagname&lt;div&gt;&lt;span style=&quot;background-color: #f4cccc;&quot;&gt;&amp;nbsp;//tagname[@attribute=&#39;value&#39;]&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;driver.findElement(By.xpath(&quot;//input[@placeholder=&#39;Name&#39;]&quot;))&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. By index of the attribute&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #f4cccc;&quot;&gt;&amp;nbsp;//tagname[@attribute=&#39;value&#39;][index]&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;driver.findElement(By.xpath(&quot;//input[@type=&#39;text&#39;][2]&quot;))&amp;nbsp;&lt;/div&gt;&lt;div&gt;Used when your attribute and the value are same for multiple elements&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. By tagnames when there are many instances of the childtag.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #f4cccc;&quot;&gt;&amp;nbsp;//parenttag/childtag[index])&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;driver.findElement(By.xpath(&quot;//form/input[3]&quot;))&amp;nbsp;&lt;/div&gt;&lt;div&gt;Use index when there are many instances of child tag and you have to locate one of them.)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;4. By parent to child-tag&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #f4cccc;&quot;&gt;//parenttag[@attribute=&#39;value&#39;]/childtag[index])&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;driver.findElement(By.xpath(&quot; //div[@class=&#39;forgot-pwd-btn-conainer&#39;]/button[1]&quot;))&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;5. With regular expression&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #ea9999;&quot;&gt;&amp;nbsp;//tagname[contains(@class,&#39;value&#39;)]&lt;/span&gt;
driver.findElement(By.xpath(&quot;//button[contains(@class,&#39;submit&#39;)]&quot;))

&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/845175847412507418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/11/1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/845175847412507418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/845175847412507418'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/11/1.html' title='Selenium - Xpath Locators'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-3372245841861491510</id><published>2022-06-13T11:31:00.014-07:00</published><updated>2023-03-13T09:24:37.203-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="ESB"/><category scheme="http://www.blogger.com/atom/ns#" term="WSO2"/><title type='text'>Revisiting ESB</title><content type='html'>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;Messaging Architecture&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsL74TqYCsKrdiR90LMYctyJrDJ_s10mBH9EB0QNVDJD9cs47IDDMBq78-FM1XCIID5H3b1897fPeOdGf3Gen0PspoXATyoaY3Ev8jbLUXDQoYI_5ZVV5WisLCp_Xwc6fesVsVjx_pOrPOSfQMt2p71lyVkL98fdCUjvgcL5oBJ3jc03kHHvSldhG2/s1340/Blank%20diagram.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;589&quot; data-original-width=&quot;1340&quot; height=&quot;222&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsL74TqYCsKrdiR90LMYctyJrDJ_s10mBH9EB0QNVDJD9cs47IDDMBq78-FM1XCIID5H3b1897fPeOdGf3Gen0PspoXATyoaY3Ev8jbLUXDQoYI_5ZVV5WisLCp_Xwc6fesVsVjx_pOrPOSfQMt2p71lyVkL98fdCUjvgcL5oBJ3jc03kHHvSldhG2/w564-h222/Blank%20diagram.png&quot; width=&quot;564&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;h2&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;h2&gt;&lt;b&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;High-level Architecture&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYoW7bAFr1R3vUonp9pTrzBzdjPNTe4wRUToeuIY317zXNiZk16jVqVgfDLU9N559bzsFo9qJuDUzQ4kc2-Y-jBuO0UlgDYp6I2kT1YUdGnM2P8A_etL54lkx40iZ_ELxPSTUKfKke-uZ8cuC8jaEsmUhxxR2gmpeSE7LK2_PpIq0jRNw_CjP9oond/s1768/Blank%20diagram.jpeg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;703&quot; data-original-width=&quot;1768&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYoW7bAFr1R3vUonp9pTrzBzdjPNTe4wRUToeuIY317zXNiZk16jVqVgfDLU9N559bzsFo9qJuDUzQ4kc2-Y-jBuO0UlgDYp6I2kT1YUdGnM2P8A_etL54lkx40iZ_ELxPSTUKfKke-uZ8cuC8jaEsmUhxxR2gmpeSE7LK2_PpIq0jRNw_CjP9oond/w595-h236/Blank%20diagram.jpeg&quot; width=&quot;595&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/3372245841861491510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/06/touring-through-onboarding-phase-1-esb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/3372245841861491510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/3372245841861491510'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/06/touring-through-onboarding-phase-1-esb.html' title='Revisiting ESB'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsL74TqYCsKrdiR90LMYctyJrDJ_s10mBH9EB0QNVDJD9cs47IDDMBq78-FM1XCIID5H3b1897fPeOdGf3Gen0PspoXATyoaY3Ev8jbLUXDQoYI_5ZVV5WisLCp_Xwc6fesVsVjx_pOrPOSfQMt2p71lyVkL98fdCUjvgcL5oBJ3jc03kHHvSldhG2/s72-w564-h222-c/Blank%20diagram.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6753730558880804866.post-6405974299740041204</id><published>2022-06-13T10:08:00.002-07:00</published><updated>2023-03-13T09:24:51.126-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WSO2"/><title type='text'>Back in WSO2 ..❤️</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;It&#39;s been more than 5 years since I&#39;ve last blogged here! Also, that&#39;s almost the same length of time that I was away. Away from WSO2.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;During the last 5+ years I was working for an organization in the telecommunication domain. With them, I joined to head the Production support to WSO2 based product platform they had and then gradually picked up, Delivery, Product management and finally headed a product department. Not only that I was moved across 3 company logos within the same group!! I guess it explains the dynamics. Entirely a roller-coaster ride which was made okay by certain lead levels and dear teams I engaged with during the journey.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;This June,&lt;/b&gt; I joined &lt;b&gt;WSO2&lt;/b&gt; &lt;b&gt;again&lt;/b&gt;. Much thankful to Sanjiva, Customer Success leadership for accepting me.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Today&#39;s post is all to say how grateful it feels to join again.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt2jYniaUmnzBmhHvhKyytc_tzYeA-pdEttodMixOKCaJjfnRn5pA0vqtunpOrwZLqoSf_ji3JP4tIrv3DM7ptUdZcmhbaQVIPK5k6H9iy0PlBllHOUbfGOjhmjaOLWSo7pumHXBSIbcWvHsD_L3rm2OZtEQSPJsWN9TWt3nOHdL3NOybyLjB13X9S/s4032/wso2-welcome.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt2jYniaUmnzBmhHvhKyytc_tzYeA-pdEttodMixOKCaJjfnRn5pA0vqtunpOrwZLqoSf_ji3JP4tIrv3DM7ptUdZcmhbaQVIPK5k6H9iy0PlBllHOUbfGOjhmjaOLWSo7pumHXBSIbcWvHsD_L3rm2OZtEQSPJsWN9TWt3nOHdL3NOybyLjB13X9S/w400-h300/wso2-welcome.jpeg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Onboarding program at WSO2 simply re-confirms how well you would be looked after.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Initial interfacing by the HR teams to collect my data, personalized couriering of the brand new Apple MacBook Pro and broad welcome greet followed by the amazing onboarding orientation. There was so much attention by WSO2 to all the details. Things like EPF form was sent home with an ink pad and filled form to be collected by the company arranged currier.&amp;nbsp; Comprehensive hands-on session with digi-ops to set up the laptop, mail, apps, etc, so you can operate as everyone else from the day 1 itself! Each of the department joined the induction program to tell new employees about what they do how we can engage. I am sure each batch must be feeling very special and totally ready by the time they are through this program.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Induction hands you over to your lead who discusses their planned programs with necessary buddy support etc.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Yeap.. That was my first 4 days after re-joining!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Looking forward to serve at my best and enjoy every min of it!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yumani.blogspot.com/feeds/6405974299740041204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yumani.blogspot.com/2022/06/back-in-wso2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6405974299740041204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6753730558880804866/posts/default/6405974299740041204'/><link rel='alternate' type='text/html' href='http://yumani.blogspot.com/2022/06/back-in-wso2.html' title='Back in WSO2 ..❤️'/><author><name>Yumani Ranaweera</name><uri>http://www.blogger.com/profile/01440428243489858364</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoIEZFfVdqqnDzS9nEBNeZng0kF_chHp5O4-vKOJURgWWBnkJd2O8w-Lu5aBJFCPlpWwaP7USlVuVOjXv0CRxBdkrrKJiuozPxKxBTqJImtzMDLfGXGEu55YC502d3tg/s113/BLOG.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt2jYniaUmnzBmhHvhKyytc_tzYeA-pdEttodMixOKCaJjfnRn5pA0vqtunpOrwZLqoSf_ji3JP4tIrv3DM7ptUdZcmhbaQVIPK5k6H9iy0PlBllHOUbfGOjhmjaOLWSo7pumHXBSIbcWvHsD_L3rm2OZtEQSPJsWN9TWt3nOHdL3NOybyLjB13X9S/s72-w400-h300-c/wso2-welcome.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>