<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Natesh M Bhat</title>
    <description>The latest articles on Forem by Natesh M Bhat (@nateshmbhat).</description>
    <link>https://forem.com/nateshmbhat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F181341%2Fa2fa1fb9-6882-4429-9227-7bcd637d5969.jpg</url>
      <title>Forem: Natesh M Bhat</title>
      <link>https://forem.com/nateshmbhat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nateshmbhat"/>
    <language>en</language>
    <item>
      <title>react-profiles deployed !</title>
      <dc:creator>Natesh M Bhat</dc:creator>
      <pubDate>Sat, 15 Aug 2020 06:57:54 +0000</pubDate>
      <link>https://forem.com/nateshmbhat/react-profiles-integrated-1h91</link>
      <guid>https://forem.com/nateshmbhat/react-profiles-integrated-1h91</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;github actions makes Publishing packages to various package managers easier than ever before.&lt;/p&gt;

&lt;p&gt;I am using "Node.js Package" workflow to build and publish my npm package into npm and github packages when i create a new release in my codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;DIY Deployments&lt;/p&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nateshmbhat"&gt;
        nateshmbhat
      &lt;/a&gt; / &lt;a href="https://github.com/nateshmbhat/react-profiles"&gt;
        react-profiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A set of Profile UI components like Github , Stackoverflow , hackerrank with automatic api calls to get the profile data of a user.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
react-profiles&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;A collection various Profile components with auto data retrieval using public APIs and auto cache management of profile data. You wanna showcase your profile ? Style it up with react-profiles :)&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
Features :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Profile components for lot of common sites.&lt;/li&gt;
&lt;li&gt;Compressed SVG icons for scalability.&lt;/li&gt;
&lt;li&gt;Uses public APIs to fetch data based on given username&lt;/li&gt;
&lt;li&gt;Manages caching of API data automatically with appropriate refresh frequency.&lt;/li&gt;
&lt;li&gt;Material ui components for visual treat.&lt;/li&gt;
&lt;li&gt;Tooltip customization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/nateshmbhat/react-profiles/master/#"&gt;&lt;img src="https://camo.githubusercontent.com/c3b1d0e7bd06ec8bb8dcd500f477d43e108ef827/68747470733a2f2f692e696d6775722e636f6d2f59367a615851702e676966" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Usage :&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;npm install react-profiles
&lt;/code&gt;&lt;/pre&gt;
&lt;div class="highlight highlight-source-js"&gt;&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-v"&gt;GitHub&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;HackerRank&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Facebook&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;StackOverflow&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;LinkedIn&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Instagram&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;GooglePlus&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Youtube&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Yahoo&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Twitch&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Twitter&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-v"&gt;Skype&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'react-profiles'&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;strong&gt;NOTE : DONT FORGET to include fontawesome css in your index.html&lt;/strong&gt;
&lt;/h4&gt;
&lt;div class="highlight highlight-text-html-basic"&gt;&lt;pre&gt;&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;link&lt;/span&gt; &lt;span class="pl-c1"&gt;href&lt;/span&gt;="&lt;span class="pl-s"&gt;http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css&lt;/span&gt;" &lt;span class="pl-c1"&gt;rel&lt;/span&gt;="&lt;span class="pl-s"&gt;stylesheet&lt;/span&gt;"  &lt;span class="pl-c1"&gt;type&lt;/span&gt;='&lt;span class="pl-s"&gt;text/css&lt;/span&gt;'&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;
Profile Bars :&lt;/h3&gt;
&lt;h4&gt;
GitHub (auto fetch data) :&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/nateshmbhat/react-profiles/master/#"&gt;&lt;img src="https://camo.githubusercontent.com/565051ad50446a24ed6b50d2853b2ed218c94efa/68747470733a2f2f692e696d6775722e636f6d2f36526d626871652e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-js"&gt;&lt;pre&gt;&lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;GitHub&lt;/span&gt; &lt;span class="pl-c1"&gt;username&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"nateshmbhat"&lt;/span&gt; /&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;
StackOverflow&lt;/h4&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nateshmbhat/react-profiles"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>actionshackathon</category>
      <category>github</category>
      <category>opensource</category>
      <category>react</category>
    </item>
    <item>
      <title>Automate your web pages with "webbot 🤖" without much code 🚀🔥</title>
      <dc:creator>Natesh M Bhat</dc:creator>
      <pubDate>Thu, 21 May 2020 17:19:39 +0000</pubDate>
      <link>https://forem.com/nateshmbhat/automate-your-web-pages-with-webbot-without-much-code-6ih</link>
      <guid>https://forem.com/nateshmbhat/automate-your-web-pages-with-webbot-without-much-code-6ih</guid>
      <description>&lt;h2&gt;
  
  
  What is webbot ?
&lt;/h2&gt;

&lt;p&gt;webbot is a web automation library in Python. To be more descriptive , it a library used for web browser automation and to some extent can be used for ui automation and end to end testing. But why should you use this when clearly there are other alternatives 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you may want to use webbot ?
&lt;/h2&gt;

&lt;p&gt;Here are some of the features that I have listed on my github page which I am directly quoting here : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use any combination of selectors like id, name, text, css etc to perform actions on elements with one line of code.&lt;/li&gt;
&lt;li&gt;Automate and test pages loaded dynamically by javascript.&lt;/li&gt;
&lt;li&gt;Click any button or link without having to worry about finding the element first or knowing css_selectors , xpath etc&lt;/li&gt;
&lt;li&gt;Smart scoring algorithm which finds the best matching elements on which you want to perform the action .&lt;/li&gt;
&lt;li&gt;Automation designed to work even in case of webpages with dynamically changing id and classname&lt;/li&gt;
&lt;li&gt;Immensely minimises the code required for performing input actions like clicks and keyboard actions.&lt;/li&gt;
&lt;li&gt;Get webpage source , cookies , total tabs , webpage title etc..&lt;/li&gt;
&lt;li&gt;Simulate key presses and special key combinations&lt;/li&gt;
&lt;li&gt;Bidirectional scrolling&lt;/li&gt;
&lt;li&gt;Perform an action on webpage elements by applying various filters to select the elements .&lt;/li&gt;
&lt;li&gt;Perform action on multiple elements at once.&lt;/li&gt;
&lt;li&gt;If certain elements don't have text or visible property , then use either their id , class , css_selector , xpath , tag etc.&lt;/li&gt;
&lt;li&gt;The entire automation process can be made without having to open the browser window i.e in the background as a console process (see docs for more details)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nateshmbhat"&gt;
        nateshmbhat
      &lt;/a&gt; / &lt;a href="https://github.com/nateshmbhat/webbot"&gt;
        webbot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Web automation library for simple and easy end to end testing and web browser automation that offers super charged features while keeping it simple to use and master
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://raw.githubusercontent.com/nateshmbhat/webbot/master/.github/logo.svg?sanitize=true"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7JVQkABf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/nateshmbhat/webbot/master/.github/logo.svg%3Fsanitize%3Dtrue" width="230px" height="230px"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
 🤖 Crazy Smart Web automation and testing library for python &lt;/h2&gt;
&lt;p&gt;&lt;a href="https://pepy.tech/project/webbot" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/72106a4180cf70a16dc7fb6377dbd8c0031be57b/68747470733a2f2f706570792e746563682f62616467652f776562626f74" alt="Downloads"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/bf8502ce9d35596a893110deac1f54ecbf440285/68747470733a2f2f706570792e746563682f62616467652f776562626f742f7765656b"&gt;&lt;img src="https://camo.githubusercontent.com/bf8502ce9d35596a893110deac1f54ecbf440285/68747470733a2f2f706570792e746563682f62616467652f776562626f742f7765656b" alt="Downloads"&gt;&lt;/a&gt;    &lt;a href="https://webbot.readthedocs.io/en/latest/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/02f73e9d6d4a4f2e1fc9a0d9603d0be97065916b/68747470733a2f2f696d672e736869656c64732e696f2f72656164746865646f63732f776562626f742e7376673f7374796c653d706c6173746963" alt=""&gt;&lt;/a&gt;  &lt;a href="https://github.com/nateshmbhat/webbot"&gt;&lt;img src="https://camo.githubusercontent.com/89e12e128bb28410bb5d160c1a7b9853a7fdfdc1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f636f64652d73697a652f6e61746573686d626861742f776562626f742e7376673f7374796c653d706c6173746963" alt=""&gt;&lt;/a&gt;  &lt;a href="https://github.com/nateshmbhat/webbot"&gt;&lt;img src="https://camo.githubusercontent.com/bbe49bdc96b03b026e32a5f507b507421472da16/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6e61746573686d626861742f776562626f743f7374796c653d706c6173746963" alt=""&gt;&lt;/a&gt; &lt;a href="https://github.com/nateshmbhat/webbot"&gt;&lt;img src="https://camo.githubusercontent.com/1dd5724f1d204e218e205f6e2c76687edcb0aa24/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f776562626f742e7376673f7374796c653d706c6173746963" alt=""&gt;&lt;/a&gt; &lt;a href="https://github.com/nateshmbhat/webbot"&gt;&lt;img src="https://camo.githubusercontent.com/697a02efc4418855acf1a4fc79f252915a527d37/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f746f702f6e61746573686d626861742f776562626f742e7376673f7374796c653d706c6173746963" alt=""&gt;&lt;/a&gt; &lt;a href="https://github.com/nateshmbhat"&gt;&lt;img src="https://camo.githubusercontent.com/9101d287f47b54b39fe6a0c6bf959d607d3baf9a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f617574686f722d6e61746573686d626861742d677265656e2e737667" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;webbot provides a much feature rich automation than selenium for all kinds of automation of webpage. Since the major portion of web automation is to perform actions like click and type into webpage elements , webbot automatically handles finding the right elements to perform the actions.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/nateshmbhat" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/79d7b860e5c99de68bb287c85b7608d3004acdbd/68747470733a2f2f63646e2e6275796d6561636f666665652e636f6d2f627574746f6e732f626d632d6e65772d62746e2d6c6f676f2e737667" alt="Buy me a coffee 😇"&gt;&lt;span&gt;Buy me a coffee 😇&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Features :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Click any button or link without having to worry about finding the element first or knowing css_selectors , xpath etc&lt;/li&gt;
&lt;li&gt;Automate and test pages loaded dynamically by javascript.&lt;/li&gt;
&lt;li&gt;Smart scoring algorithm which finds the best matching elements on which you want to perform the action .&lt;/li&gt;
&lt;li&gt;The entire automation process can be made without having to open the browser window i.e in the background as a console process (see docs for more details )&lt;/li&gt;
&lt;li&gt;Use any combination of selectors like id, name, text, css etc to perform…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nateshmbhat/webbot"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;
  
  
  Here's a sample code snippet of webbot under action 🥳
&lt;/h3&gt;

&lt;p&gt;The below code will first go to google.com and search for the song "hello its me" and then come back to google and signs in with the provided email and password.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;webbot&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt; 
&lt;span class="n"&gt;web&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;go_to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'google.com'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'hello its me'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# or web.press(web.Key.SHIFT + 'hello its me')
&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;press&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ENTER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;go_back&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Sign in'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'mymail@gmail.com'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'Email'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'NEXT'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'span'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'mypassword'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'Password'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'passwordFieldId'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'NEXT'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'span'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If you wish to use some lower level "find_element_by..." functions yourself , you are still covered 😁. Just get the underlying selenium driver object like this : &lt;code&gt;web.driver&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why and How I made it ?
&lt;/h2&gt;

&lt;p&gt;Well , honestly it was mostly about writing too much code when using selenium for web automation. &lt;/p&gt;

&lt;p&gt;I was using selenium for some of my projects and it felt like I was writing way too much code than what was necessary. I realised that the reason this happened was not because of any inefficiency or bad api of selenium but it was just because of the way in which the interaction with the web was modelled upon.&lt;/p&gt;

&lt;p&gt;What ? What do I mean by this ?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The web automation code first requires that the element is first found before we perform any action.&lt;/li&gt;
&lt;li&gt;This means that we end up writing too much "find_element_by_..." code rather than focusing on just doing what we wanted : i.e just click that damn button which just said "click me".&lt;/li&gt;
&lt;li&gt;So basically we first find the element which we were looking for and then perform the action. The action could be a click or a keyboard keypress , scroll etc&lt;/li&gt;
&lt;li&gt;But what we as developers want is to just perform the action on some element not worry about finding it all by ourselves.&lt;/li&gt;
&lt;li&gt;In a nut shell , what we want is an action centric approach rather than an element centric approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With webbot , that's the approach I am taking. An action centric approach rather than the usual element centric approach. You tell webbot what action you wanna do rather than trying to worry about all those css selectors , xpath , etc. Depending on the type of action you perform , whether it is click , type , keypress etc , it has a scoring algorithm that will find appropriate elements based on the action. &lt;/p&gt;

&lt;p&gt;So for example , if you are trying to run &lt;code&gt;web.click( 'sign in' )&lt;/code&gt; , then it gives a scoring to all elements containing the 'sign in' text and the clickable elements (buttons , anchor tags , elements with onPress) etc take appropriate scores and the best scoring element from the lot is chosen to perform the click action.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Thoughts / Feelings / Stories
&lt;/h2&gt;

&lt;p&gt;I made this project during my college days. This is my graduation year. Loads and loads of memories to cherish. Now, when I look back , I realise that these were the best days of my life. These were the days where I lived more than I had ever ! Will miss all this so damn much. Anyway I am writing this article because I got an email from GitHub regarding a "graduation" ceremony for 2020 graduates. I am more than happy to take part in this :)&lt;/p&gt;

&lt;p&gt;Thanks guys :)&lt;/p&gt;

&lt;p&gt;You can check my other post on dev I wrote earlier here where I talk about using electron with react and typescript support : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/nateshmbhat/terminal-tweaker-an-electron-react-project-to-tweak-the-new-windows-terminal-to-heart-s-content-4c95"&gt;Terminal Tweaker : An electron-react project to tweak the new windows terminal to heart's content ❤.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check me out on :&lt;br&gt;
Github : &lt;a href="https://github.com/nateshmbhat"&gt;https://github.com/nateshmbhat&lt;/a&gt;&lt;br&gt;
LinkedIn : &lt;a href="https://www.linkedin.com/in/nateshmbhat"&gt;https://www.linkedin.com/in/nateshmbhat&lt;/a&gt;&lt;br&gt;
Instagram : &lt;a href="https://www.instagram.com/nateshmbhat"&gt;https://www.instagram.com/nateshmbhat&lt;/a&gt;&lt;br&gt;
Facebook : &lt;a href="https://www.facebook.com/profile.php"&gt;https://www.facebook.com/profile.php&lt;/a&gt;?...&lt;br&gt;
Twitter : &lt;a href="https://twitter.com/nateshmbhat"&gt;https://twitter.com/nateshmbhat&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank You for reading till this last line 😍 !!! You are amazing 😎!
&lt;/h3&gt;

</description>
      <category>octograd2020</category>
      <category>webdev</category>
      <category>python</category>
      <category>automation</category>
    </item>
    <item>
      <title>Terminal Tweaker : An electron-react project to tweak the new windows terminal to heart's content ❤.</title>
      <dc:creator>Natesh M Bhat</dc:creator>
      <pubDate>Sun, 28 Jul 2019 08:33:08 +0000</pubDate>
      <link>https://forem.com/nateshmbhat/terminal-tweaker-an-electron-react-project-to-tweak-the-new-windows-terminal-to-heart-s-content-4c95</link>
      <guid>https://forem.com/nateshmbhat/terminal-tweaker-an-electron-react-project-to-tweak-the-new-windows-terminal-to-heart-s-content-4c95</guid>
      <description>&lt;p&gt;Hey guys, Good day. Before I talk anything about this project, I am happy to say that this is my first post on the dev community and I'm so very excited to share whatever small things I have cooked up on my pc to this wonderful community. With this, let's get some electron stuff up our brains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If all you want is to check out the app and the project , here's the link to the repository and the binaries:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://github.com/nateshmbhat/windows-terminal-tweaker/releases" rel="noopener noreferrer"&gt;Terminal Tweaker executables&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nateshmbhat" rel="noopener noreferrer"&gt;
        nateshmbhat
      &lt;/a&gt; / &lt;a href="https://github.com/nateshmbhat/windows-terminal-tweaker" rel="noopener noreferrer"&gt;
        windows-terminal-tweaker
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Tweak your windows terminal to heart's content with this app using its beautiful interface to configure everything about the terminal.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/nateshmbhat/windows-terminal-tweaker./renderer/assets/app.svg"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fnateshmbhat%2Fwindows-terminal-tweaker.%2Frenderer%2Fassets%2Fapp.svg" width="100" alt="Banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Terminal-Tweaker&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Tweak your windows terminal to heart's content with this app using its beautiful interface to configure everything about the terminal.&lt;/p&gt;
&lt;p&gt;With the provided material themed color pickers , it becomes super simple to configure all those cute little colors you see in the terminal. See the tweaks reflect on the terminal in real time.&lt;/p&gt;
&lt;p&gt;The app gives control over creation , deletion and updation for all of your profiles and color schemes and much more.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Download the tweaker here :&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nateshmbhat/windows-terminal-tweaker/releases/download/0.1.1/Terminal.Tweaker.Portable.zip" rel="noopener noreferrer"&gt;Terminal Tweaker portable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nateshmbhat/windows-terminal-tweaker/releases/download/0.1.1/Terminal.Tweaker.0.1.1.single.executable.exe" rel="noopener noreferrer"&gt;Terminal Tweaker single file executable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Links :&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bit.ly/2MhyTAp" rel="nofollow noopener noreferrer"&gt;About the app and my take on the technologies I used for this project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I built this on top of my &lt;a href="https://github.com/nateshmbhat/electron-react-ts-starter" rel="noopener noreferrer"&gt;electron-react-typescript&lt;/a&gt; starter pack which comes with sweet typescript autoreloading and most bug fixes with CRA support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.microsoft.com/store/productId/9N0DX20HK701" rel="nofollow noopener noreferrer"&gt;New windows terminal&lt;/a&gt; if you don't have it already.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Screenshots :&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/23279926/62006828-aa62ef80-b163-11e9-82e3-afcead79e368.PNG"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F23279926%2F62006828-aa62ef80-b163-11e9-82e3-afcead79e368.PNG" alt=""&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/23279926/62006825-a9ca5900-b163-11e9-8e9a-0647d1ed2870.PNG"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F23279926%2F62006825-a9ca5900-b163-11e9-8e9a-0647d1ed2870.PNG" alt=""&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/23279926/62006827-a9ca5900-b163-11e9-9647-0920a673935b.PNG"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F23279926%2F62006827-a9ca5900-b163-11e9-9647-0920a673935b.PNG" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nateshmbhat/windows-terminal-tweaker" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;When I saw the new windows terminal trailer, damn it looked hot. But little did I know that configuring it would be a bit of pain before I installed it. So I rolled out a tweaker of my own for the terminal which does the configuration parsing and editing through the tweaker UI that's shown to the user.&lt;/p&gt;

&lt;p&gt;This app reduces the tediousness of manual configuration through file editing and provides options to configure everything that about the terminal with material color pickers and others UI elements for customization.&lt;/p&gt;

&lt;p&gt;Coming to the UI it's built using react with the semantic UI style components and state management is done using redux. Since I've been using React for a while, the best tech right now (as of 2019) to roll out desktop apps would be electron.&lt;/p&gt;

&lt;h4&gt;
  
  
  Well, after using electron I have mixed thoughts about it. Here's a rundown.
&lt;/h4&gt;

&lt;h3&gt;
  
  
  Type Safety and Auto Reloading :
&lt;/h3&gt;

&lt;p&gt;After using javascript and typescript for a while, I felt insecure to not use typescript when I can. Though using electron was fun, it did come along with some issues when integrating create-react-app with typescript and making auto-reloading to work right.&lt;br&gt;
 As I ended up with many bugs and issues along the way, I decided to make a starter pack with all bug fixes, sweet auto-reloading, and typescript support to make testing during development pain-free. Here's my repo of this pack.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nateshmbhat" rel="noopener noreferrer"&gt;
        nateshmbhat
      &lt;/a&gt; / &lt;a href="https://github.com/nateshmbhat/electron-react-ts-starter" rel="noopener noreferrer"&gt;
        electron-react-ts-starter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A solid :) boiler plate starter pack when starting an electron project which uses create-react-app with typescript.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;electron-react-ts-starter&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;( Has Auto Reloading and Works with Create-React-App )&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;This is a boiler plate starter pack when starting an electron project which uses react with typescript. The code contains some bug fixes that are found when using react with electron and typescript and has auto monitoring of typescript changes to reload the electron app for faster development.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Why this electron-react-ts-starter :&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Run electron app with create-react-app without ejecting.&lt;/li&gt;
&lt;li&gt;Auto reloads the electron app when the typescript source file changes. (This is missing in a lot of tutorial articles which only have an electron.js file and not a electron.ts file )&lt;/li&gt;
&lt;li&gt;Provides the required npm scripts and folder structure for simple to complex projects.&lt;/li&gt;
&lt;li&gt;Includes a very simple bundling process.&lt;/li&gt;
&lt;li&gt;Auto reloads app for changes in both main process files and react files.&lt;/li&gt;
&lt;li&gt;With the provided folder structure , main and renderer process codebase can be maintained independently.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage :&lt;/h2&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nateshmbhat/electron-react-ts-starter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Startup Times :
&lt;/h3&gt;

&lt;p&gt;Electron makes use of chromium's rendering engine and this means more startup time than all those other apps out there. Though there are minor tweaks that you can do to speed it up, there's only so much you can do.&lt;/p&gt;

&lt;h3&gt;
  
  
  React :
&lt;/h3&gt;

&lt;p&gt;Well, this is the shiniest part of the project for me. Enjoyed using the new hooks API to the fullest with all the new juicy hooks along with pretty damn useful custom hooks. Using react with redux was fun and nothing short of satisfying.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building and packaging :
&lt;/h3&gt;

&lt;p&gt;One of the scariest things that happen when using techs like this is an issue during building and release. Thankfully I was able to fix some of the issues that occur during packaging of the app for release and the starter pack above includes those fixes to make packaging easier. For building, I used electron-builder. I didn't have to worry about cross-platform issues since this tweaker is meant for windows 10 and above versions only.&lt;/p&gt;

&lt;h3&gt;
  
  
  Things you have to bear in your final app :
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;High memory consumption.&lt;/li&gt;
&lt;li&gt;Slightly higher startup time.&lt;/li&gt;
&lt;li&gt;If your application is a basic one, then packaged executable sizes could seem too much since electron itself takes somewhere around 80 MB of space (rough estimate) in the packaged app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Worth it or Not?
&lt;/h2&gt;

&lt;p&gt;For me, it was. Other than the fact that the executable size is more, the ability to make your web app as a desktop app is not a small thing to have given the upsurge of web frameworks and technologies nowadays.&lt;/p&gt;

&lt;h4&gt;
  
  
  Efforts to fix electron's limitations :
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Here's some notable work that's done to reduce electron app size and memory usage: &lt;a href="https://medium.com/dailyjs/put-your-electron-app-on-a-diet-with-electrino-c7ffdf1d6297" rel="noopener noreferrer"&gt;https://medium.com/dailyjs/put-your-electron-app-on-a-diet-with-electrino-c7ffdf1d6297&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>electron</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
