<?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>DEV Community: Liviu Lupei</title>
    <description>The latest articles on DEV Community by Liviu Lupei (@liviufromendtest).</description>
    <link>https://dev.to/liviufromendtest</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%2F424575%2F9d3fad60-a899-4316-9468-7c6db3befa22.png</url>
      <title>DEV Community: Liviu Lupei</title>
      <link>https://dev.to/liviufromendtest</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/liviufromendtest"/>
    <language>en</language>
    <item>
      <title>TestProject is closing down</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Mon, 21 Nov 2022 18:16:46 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/testproject-is-closing-down-58</link>
      <guid>https://dev.to/liviufromendtest/testproject-is-closing-down-58</guid>
      <description>&lt;p&gt;&lt;a href="https://testproject.io/"&gt;TestProject&lt;/a&gt; was a test automation tool developed in Israel.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happened?
&lt;/h3&gt;

&lt;p&gt;The official announcement came through a &lt;a href="https://blog.testproject.io/2022/11/17/testproject-end-of-life-your-questions-answered/"&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;TestProject launched in 2017 and it stood out by not offering a paid tier.&lt;/p&gt;

&lt;p&gt;Unlike other next-gen test automation tools, it didn't offer any cross-browser cloud.&lt;/p&gt;

&lt;p&gt;That meant their own cloud infrastructure bill was probably small.&lt;/p&gt;

&lt;p&gt;But it also meant that the only option to run your tests was to use your localhost or to connect to a third party cross-browser cloud provider (&lt;a href="https://www.browserstack.com/"&gt;BrowserStack&lt;/a&gt;, &lt;a href="https://saucelabs.com"&gt;SauceLabs&lt;/a&gt;, etc).&lt;/p&gt;

&lt;p&gt;That increased the complexity and affected the user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I liked about TestProject:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It was no-code/low-code, that means it helped democratize test automation, making it available to everyone&lt;/li&gt;
&lt;li&gt;It worked for both Web Applications (websites) and Mobile Applications (Native and Hybrid)&lt;/li&gt;
&lt;li&gt;They had a nice blog where anyone could post articles&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I didn't like about TestProject:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No cross-browser cloud, users had to get their own infrastructure&lt;/li&gt;
&lt;li&gt;Lack of stability, users often complained about the downtimes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--myxUIsaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t3qm2c4e57uifzlr3raf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--myxUIsaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t3qm2c4e57uifzlr3raf.png" alt="testproject stability" width="880" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the alternatives?
&lt;/h3&gt;

&lt;p&gt;Fortunately, there are plenty of next-gen test automation tools to choose from. &lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://endtest.io"&gt;Endtest&lt;/a&gt; platform is one of them. To help get your automated testing back on track, we'll help you migrate your old TestProject tests. We're also offering a 20% discount to TestProject users that start using Endtest before TestProject's EOL.&lt;/p&gt;

&lt;p&gt;A detailed comparison between Endtest and TestProject can be found here:&lt;br&gt;
&lt;a href="https://www.endtest.io/testproject-alternative"&gt;https://www.endtest.io/testproject-alternative&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use a next-gen test automation tool?
&lt;/h3&gt;

&lt;p&gt;In general, the purpose of innovation is to drive down the complexity and cost of doing things.&lt;/p&gt;

&lt;p&gt;A next-gen test automation tool helps you create, execute and maintain complex tests, without breaking a sweat. &lt;/p&gt;

&lt;p&gt;The days when your team had to stitch together your own Selenium/Cypress framework are long behind us.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Version 💯 of Chrome, Edge, and Firefox may break your website</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Mon, 21 Feb 2022 09:53:06 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/version-of-chrome-edge-and-firefox-may-break-your-website-3ilb</link>
      <guid>https://dev.to/liviufromendtest/version-of-chrome-edge-and-firefox-may-break-your-website-3ilb</guid>
      <description>&lt;p&gt;Chrome, Microsoft Edge and Firefox are all getting closer to the release of their 100th version.&lt;/p&gt;

&lt;p&gt;This may look like a nice round number, but it might introduce bugs or create compatibility issues for your website.&lt;/p&gt;

&lt;p&gt;We've seen similar situations, such as the Y2K bug and Microsoft skipping Windows 9.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. How exactly?
&lt;/h2&gt;

&lt;p&gt;This particular situation is related to how websites read user-agent (UA) strings to identify your web browser.&lt;/p&gt;

&lt;p&gt;When you visit a webpage on a website, your browser sends a request to that page that includes a user agent string that looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) &lt;br&gt;
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mozilla already ran some experiments in August 2021 to test if three-digit version numbers would break some websites, and found that a number of websites did not work properly.&lt;/p&gt;

&lt;p&gt;Examples include Slack, Yahoo, Bethesda, HBO GO, and more.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. It's not just your own code
&lt;/h2&gt;

&lt;p&gt;Think about all those 3rd party libraries your website is currently using.&lt;/p&gt;

&lt;p&gt;Each one has its own way of checking the browser version.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TYzRrAbU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3opt55754w7hpt63q6r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TYzRrAbU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3opt55754w7hpt63q6r.png" alt="npm packages" width="880" height="705"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3. How to prevent this?
&lt;/h2&gt;

&lt;p&gt;As always, testing is the only way to know that a website works as expected.&lt;/p&gt;

&lt;p&gt;Chrome 100 will be released on March 29 and Firefox 100 will land on May 3, but you don't have to wait until then.&lt;/p&gt;

&lt;p&gt;You'll be able to test your website on these browser versions while they're in beta, by using &lt;a href="https://endtest.io"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Right now, you can already run your automated tests on Chrome Beta v99, Edge Beta v99 and Firefox Beta v98.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PIIGKq9O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qwxkj9ipfcu5f6jzu3dx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PIIGKq9O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qwxkj9ipfcu5f6jzu3dx.png" alt="Endtest" width="880" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to learn more about that platform, I recorded a video tutorial:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/usUEr0KUaKw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>What Happens When You Don't Test in Safari</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Tue, 15 Feb 2022 09:11:22 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/what-happens-when-you-dont-test-in-safari-5je</link>
      <guid>https://dev.to/liviufromendtest/what-happens-when-you-dont-test-in-safari-5je</guid>
      <description>&lt;p&gt;I decided to write about a major bug I recently encountered in our platform. &lt;/p&gt;

&lt;p&gt;In &lt;a href="https://endtest.io"&gt;Endtest&lt;/a&gt;, there is a section where users can view the test execution logs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xh3AiUZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgakvs6wyu3kwixm3v7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xh3AiUZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgakvs6wyu3kwixm3v7k.png" alt="endtest results" width="880" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a critical component, and that's where it occurred.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. The Bug&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We recently made a change to improve the timestamps.&lt;/p&gt;

&lt;p&gt;In our database, we store all the timestamps in UTC time zone, in a basic format:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2022-02-10 07:31:15&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And we wanted to display the timestamps in a more friendly way, while also converting them to the time zone of the user:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;February 10, 2022, 14:31:15&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was being done in the frontend, with some vanilla JavaScript.&lt;/p&gt;

&lt;p&gt;It worked great in Chrome, Edge and Firefox, but not in Safari:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0ja18IZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqxok1skvde9pevupq81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0ja18IZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqxok1skvde9pevupq81.png" alt="endtest safari bug" width="880" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. The Fix&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The issue was coming from this line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;unixTimestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;the_timestamp&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;diff&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, it's a really basic one, nothing fancy or risky.&lt;/p&gt;

&lt;p&gt;Turns out Safari has an issue with spaces in timestamps, and the solution is to replace each space with a &lt;em&gt;T&lt;/em&gt;, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;the_timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;the_timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;3. The Lesson&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;No unit or Jest test could have captured this issue. &lt;/p&gt;

&lt;p&gt;The only way to detect such an issue is to run functional tests in Safari. &lt;/p&gt;

&lt;p&gt;This shows us that a browser is more than just a JavaScript interpreter.&lt;/p&gt;

&lt;p&gt;And that cross-browser testing is more relevant than ever.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. The rise of Safari&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;More and more folks are using Safari, they're loving the privacy-focused aspect of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w8jKol09--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rclgj8cyin6kdcp865p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w8jKol09--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rclgj8cyin6kdcp865p.png" alt="browser stats" width="880" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not testing on Safari means that you might be ignoring 20% of your users.&lt;/p&gt;

&lt;p&gt;I'm also using it, but only on my phone. Chrome is still my desktop browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;strong&gt;The Democratization of Automated Testing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We've always advocated for testing in multiple browsers, that's why Safari was always an option in our platform:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t-9xEcLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vhq0z6wwznyvs0pb05qq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t-9xEcLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vhq0z6wwznyvs0pb05qq.png" alt="test in safari" width="880" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By providing browsers in the cloud, anyone can run tests on Safari, regardless of what operating system they're using.&lt;/p&gt;

&lt;p&gt;And by proving a low-code interface, anyone can create automated tests in a few minutes, even without writing code.&lt;/p&gt;

&lt;p&gt;The Test Automation space has always had its fair share of gatekeepers, and we're getting them out of the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. What about you?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Are you running your functional tests in Safari? &lt;/p&gt;

&lt;p&gt;What percentage of your users are on Safari?&lt;/p&gt;

&lt;p&gt;Did you ever find bugs that occurred only in Safari?&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How To Deceive a CAPTCHA</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Thu, 20 Jan 2022 12:54:07 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/how-to-deceive-a-captcha-57fk</link>
      <guid>https://dev.to/liviufromendtest/how-to-deceive-a-captcha-57fk</guid>
      <description>&lt;p&gt;I'm Liviu, a Solutions Architect at &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let's take a look at how we can deceive a CAPTCHA.&lt;/p&gt;

&lt;p&gt;This is useful in a test or in any script that wants to imitate a real user.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What is a CAPTCHA?
&lt;/h2&gt;

&lt;p&gt;In case there's someone out there who doesn't know:&lt;/p&gt;

&lt;p&gt;A CAPTCHA (an acronym for "Completely Automated Public Turing test to tell Computers and Humans Apart") is a type of challenge–response test used in computing to determine whether the user is human.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihhkaqvlzg25buyqpon5.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihhkaqvlzg25buyqpon5.png" alt="captcha"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's meant to stop bots and scripts from pretending to be real humans on the internet. &lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why do we need to deceive it?
&lt;/h2&gt;

&lt;p&gt;Our use case here is for an automated test. &lt;/p&gt;

&lt;p&gt;The typical workaround is to use whitelisting, and skip the CAPTCHA for requests coming from certain IP addresses.&lt;/p&gt;

&lt;p&gt;But that workaround does not verify if the CAPTCHA works and if your real users can actually sign up.&lt;/p&gt;

&lt;p&gt;What if the CAPTCHA system that you're using is broken? &lt;/p&gt;

&lt;p&gt;Your tests would pass, but your real users would get stuck.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The solution
&lt;/h2&gt;

&lt;p&gt;We need to extract the text from that image.&lt;/p&gt;

&lt;p&gt;And the best way to do that is with Optical Character Recognition (OCR).&lt;/p&gt;

&lt;p&gt;If you're looking to invest time in that and maybe even build a product around OCR, it's worth exploring the &lt;a href="https://github.com/tesseract-ocr/tesseract" rel="noopener noreferrer"&gt;Tesseract OCR package&lt;/a&gt; from Google.&lt;/p&gt;

&lt;p&gt;There are also different wrappers around this package, such as &lt;a href="https://pypi.org/project/pytesseract/" rel="noopener noreferrer"&gt;pytesseract&lt;/a&gt; for Python.&lt;/p&gt;

&lt;p&gt;But it's not that smooth, the process involves a number of steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Align the image correctly.&lt;/li&gt;
&lt;li&gt;Convert the image to grayscale.&lt;/li&gt;
&lt;li&gt;Increase the sharpeness of the image.&lt;/li&gt;
&lt;li&gt;Increase or decrease the DPI.&lt;/li&gt;
&lt;li&gt;Configure a tolerance.&lt;/li&gt;
&lt;li&gt;Extract the text.&lt;/li&gt;
&lt;li&gt;Remove or convert incorrect characters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're doing that only for an automated test, you can just use the OCR feature from &lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ucgti4jzo76izxfx0je.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ucgti4jzo76izxfx0je.png" alt="Endtest OCR"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And when you run the test, it will easily extract that text:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft49tsv8f39856q9ipaoc.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft49tsv8f39856q9ipaoc.png" alt="endtest recaptcha"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the video recording from that test execution:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/iJjL6S9qRtc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This tutorial should only be used for the websites you're testing, and not to scrape other websites.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>testing</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>What is the "no code" / "low code" movement?</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Tue, 11 Jan 2022 16:44:04 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/what-is-the-no-code-low-code-movement-3h73</link>
      <guid>https://dev.to/liviufromendtest/what-is-the-no-code-low-code-movement-3h73</guid>
      <description>&lt;p&gt;I'm Liviu, a Solutions Architect at &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take a look at this whole "no code" / "low code" movement.&lt;/p&gt;

&lt;p&gt;Is this the next big thing? 🤔&lt;/p&gt;

&lt;p&gt;Even UIPath, the juggernaut of RPA, has released &lt;a href="https://www.uipath.com/blog/product-and-updates/apps-low-code-platform" rel="noopener noreferrer"&gt;UIPath Apps&lt;/a&gt;, a low-code app builder.&lt;/p&gt;

&lt;p&gt;Microsoft also launched &lt;a href="https://powerapps.microsoft.com/en-us/" rel="noopener noreferrer"&gt;Microsoft Power Apps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And who hasn't heard of &lt;a href="https://zapier.com/" rel="noopener noreferrer"&gt;Zapier&lt;/a&gt;? &lt;/p&gt;

&lt;p&gt;But you've probably met at least one "no code" skeptic:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26i4wwyckju7a4w1eoy5.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26i4wwyckju7a4w1eoy5.png" alt="no code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. The Democratization&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Democratization empowers individuals. &lt;/p&gt;

&lt;p&gt;This movement is helping non-technical founders launch internet companies. &lt;/p&gt;

&lt;p&gt;It's no longer a privilege only for those who have vast financial resources or the opportunity to learn programming.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35r7ga3vp75z5qod95v2.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35r7ga3vp75z5qod95v2.png" alt="developer privilege"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How are we even supposed to call someone who uses Google Sheets and Trello to build an app?&lt;/p&gt;

&lt;p&gt;Can we call them Developers? I don't know, maybe.&lt;/p&gt;

&lt;p&gt;But we seem to be reaching a point where we don't need to hire a Developer for every web project that we want to build.&lt;/p&gt;

&lt;p&gt;By the way, there's a website called &lt;a href="https://www.makerpad.co/" rel="noopener noreferrer"&gt;Makerpad&lt;/a&gt; that teaches you to make projects and automate at work, without having to write code.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. The Disruption&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Technically, you can slap together some of those microservices, and you're able to put together entire web products or web services.&lt;/p&gt;

&lt;p&gt;And it would be a complete service, end-to-end, because there are even things such as Email Marketing and Automation. &lt;/p&gt;

&lt;p&gt;When I look at this, I sense &lt;strong&gt;DISRUPTION&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1og93d6png76xtsidau1.jpg" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1og93d6png76xtsidau1.jpg" alt="low code disruption"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you remember, some time ago, we had these roles called Server Admin and Database Admin?&lt;/p&gt;

&lt;p&gt;These people would just maintain the databases and the servers, helping with the scaling.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1mhhhybqt6ygt13hsr1.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1mhhhybqt6ygt13hsr1.png" alt="database admin jobs evolution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These days, we can see that no one that does that stuff anymore.&lt;/p&gt;

&lt;p&gt;Or not as many, because people are using these prebuilt platforms, by AWS and Google.&lt;/p&gt;

&lt;p&gt;That means you can get scale out of the box, simply by using these services, provided by those cloud platforms.&lt;/p&gt;

&lt;p&gt;We don't need those roles anymore, their jobs were just automated out of existence.&lt;/p&gt;

&lt;p&gt;Is this really the future of software development?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkbkzpsufbdwjr6aonx5.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkbkzpsufbdwjr6aonx5.png" alt="programming evolution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. The Skepticism&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;And just like with any disruption, you'll encounter some skepticism.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59o9ty16ik46q94jkvjg.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59o9ty16ik46q94jkvjg.png" alt="no code skeptic"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Historic examples include Amazon Web Services (AWS).&lt;/p&gt;

&lt;p&gt;If you search for posts and comments related to AWS on Reddit from 2011, you'll find plenty of opinions on why it will never work.&lt;/p&gt;

&lt;p&gt;And the same applies if you search for discussions related to Airtable from 2015. And &lt;a href="https://news.crunchbase.com/news/briefing-12-13-21/" rel="noopener noreferrer"&gt;look at them now&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. What about the Developers?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here's a funny thing, I haven't heard anything about any of this while reading &lt;a href="https://news.ycombinator.com/" rel="noopener noreferrer"&gt;HackerNews&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I go to HackerNews, this is what I see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjg3bxklvu5626h9ko47.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjg3bxklvu5626h9ko47.png" alt="hackernews"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It feels like that programmer community has their head in the sand.&lt;/p&gt;

&lt;p&gt;They seem to be completely ignoring the market, which is supplanting what these programmers are doing.&lt;/p&gt;

&lt;p&gt;At some point, it almost feels like all some programmers want to do is hit keys on a dark mode terminal, compare editors and see who can come up with the most concise and cryptic Linux command.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Who is winning?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When disruption happens, the affected activities become easier and more affordable.&lt;/p&gt;

&lt;p&gt;Do you know how expensive it was to build a startup 20 years ago? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r4dw8cmv2amnir2874p.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r4dw8cmv2amnir2874p.png" alt="launch startup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You needed at least $2M funding just to buy the servers. &lt;/p&gt;

&lt;p&gt;Thanks to AWS and other cloud platforms, anyone can purchase cloud computing resources now. &lt;/p&gt;

&lt;p&gt;And now, anyone should be able to build a web or mobile app, without having to hire expensive developers.&lt;/p&gt;

&lt;p&gt;I'm not talking about just a basic website, you can ship complete products very quickly.&lt;/p&gt;

&lt;p&gt;This includes email marketing, landing pages, CRMs, domain names, even checkout pages (see &lt;a href="https://gumroad.com/" rel="noopener noreferrer"&gt;Gumroad&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;These services have experienced explosive growth.&lt;/p&gt;

&lt;p&gt;And even our very own &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; is growing much faster than we expected.&lt;/p&gt;

&lt;p&gt;Typical reaction when someone tries our platform:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fadabd79oajr60jzbd7.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fadabd79oajr60jzbd7.png" alt="endtest review"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coming up with the code all by yourself becomes a meaningless struggle.&lt;/p&gt;

&lt;p&gt;This doesn't mean that we can all stop coding and throw code out the window. &lt;/p&gt;

&lt;p&gt;We just need to understand in what areas do we need to deploy code, and in what areas we can leverage these services in order to ship our products faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Who is losing?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The ones who will take a hit from this disruption are the ones who make a living out of keeping things complicated.&lt;/p&gt;

&lt;p&gt;Some of these folks would do anything to discourage this movement:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnarwzq6v9v8ro9wdv6ll.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnarwzq6v9v8ro9wdv6ll.png" alt="no code loser"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine being a web agency that does small projects for all sorts of businesses. &lt;/p&gt;

&lt;p&gt;And suddenly, some of these businesses no longer require your services.&lt;/p&gt;

&lt;p&gt;I've seen something similar because of &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; and other no code test automation tools. &lt;/p&gt;

&lt;p&gt;The only adversaries of these testing tools seem to be the ones who've made a career out of pasting together an incredibly overcomplicated Selenium framework, or out of teaching others how to do that.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. What problem is it solving?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A solution is successful only if it's solving a problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz1zq7prtzz5gvhmt7s0.jpeg" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz1zq7prtzz5gvhmt7s0.jpeg" alt="no code developer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software Development is slow and expensive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Software Developers have been in a privileged position, due to the high demand.&lt;/p&gt;

&lt;p&gt;But several factors in the last few years made Software Development even more expensive for companies. &lt;/p&gt;

&lt;p&gt;And we're seeing companies moving away from relying on coders to build everything. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's not just the small businesses.&lt;/p&gt;

&lt;p&gt;Most huge companies have an unhealthy obsession with saving money.&lt;/p&gt;

&lt;p&gt;There are countless &lt;a href="https://www.theguardian.com/technology/2019/aug/06/amazon-workers-minimum-wage-injuries-working-conditions" rel="noopener noreferrer"&gt;horror stories&lt;/a&gt; of highly profitable corporations, that scramble to save every penny.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relevant example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you look at the homepage from &lt;a href="https://www.airtable.com/" rel="noopener noreferrer"&gt;Airtable&lt;/a&gt;, you'll see that Netflix is one of their customers. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1u5sesj7tt0f9pcnkxo5.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1u5sesj7tt0f9pcnkxo5.png" alt="airtable customers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can imagine, Netflix has all the engineering resources to code everything by themselves, and yet, they're using Airtable for some processes. &lt;/p&gt;

&lt;p&gt;We'll most likely see the big companies pushing the pedal on this movement, since it will result in massive savings, and higher profits.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What about you?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I'd love to hear your opinions on this.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to run Cypress tests on Safari</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Thu, 16 Dec 2021 09:59:47 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/how-to-run-cypress-tests-on-safari-16mo</link>
      <guid>https://dev.to/liviufromendtest/how-to-run-cypress-tests-on-safari-16mo</guid>
      <description>&lt;p&gt;Today, we're going to learn something really important.&lt;/p&gt;

&lt;p&gt;I'm a Solutions Architect at &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;, that means I try to stay up-to-date with all the testing technologies.&lt;/p&gt;

&lt;p&gt;This article is meant to raise awareness about the importance of doing test automation the right way.&lt;/p&gt;

&lt;p&gt;Some of you might already be using Cypress, but there's a major inconvenience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cypress does not work on Safari &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's pretty serious, because Safari is the 2nd most used desktop browser in the world. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feabq9vcsj6jd1s021biw.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feabq9vcsj6jd1s021biw.png" alt="browser stats 2021"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is no excuse, you have to &lt;a href="https://endtest.io/guides/blog/2021/10/27/5-Reasons-Why-You-Should-Always-Test-on-Safari/" rel="noopener noreferrer"&gt;test on Safari&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are other incoveniences as well: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cypress cannot handle multiple browser tabs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cypress cannot access multiple URLs in the same test&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cypress has dificutlies finding elements in iframes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But does that really matter? &lt;/p&gt;

&lt;p&gt;As a Software Developer, should you actually check if your website works as expected on all major browsers?&lt;/p&gt;

&lt;p&gt;Building great software is more than just installing npm packages.&lt;/p&gt;

&lt;p&gt;And it seems the &lt;strong&gt;Can't they just use Chrome?&lt;/strong&gt; solution isn't good enough for most companies.&lt;/p&gt;

&lt;p&gt;Now, it's your responsibility to make sure those Cypress tests that you worked on for months will actually deliver some real value.&lt;/p&gt;

&lt;p&gt;Shouldn't be too hard, right? &lt;/p&gt;

&lt;p&gt;You made the decision to use Cypress instead of Selenium after reading that one blog post, that totally wasn't written by a paid &lt;a href="https://www.cypress.io/ambassadors/" rel="noopener noreferrer"&gt;Cypress Ambassador&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You did check that the person who wrote it wasn't being paid to write it, right? &lt;/p&gt;

&lt;p&gt;Ideally, you should have looked at an unbiased &lt;a href="https://endtest.io/guides/blog/2020/08/03/selenium-vs-cypress/" rel="noopener noreferrer"&gt;Selenium vs Cypress comparison&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, let me show you how to run those Cypress tests on Safari.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Run your Cypress tests on Chrome once.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  2. Export the results in HTML format:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbftopxn6g71s3gjhlwpa.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbftopxn6g71s3gjhlwpa.png" alt="cypress reports html"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Now, rename the file:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpwc37s6ukw0j0uicw7p.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpwc37s6ukw0j0uicw7p.png" alt="cypress safari"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Send that file to your Manager or put it on Slack.
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;But wait, we didn't actually test anything on Safari...&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, of course you didn't. &lt;/p&gt;

&lt;p&gt;The reality is that Cypress can never work on Safari, because Apple has a restrictive ecosystem and takes security seriously.&lt;/p&gt;

&lt;p&gt;But the Cypress tests you ran on Chrome are just as irrelevant. &lt;/p&gt;

&lt;p&gt;Want to know why? &lt;/p&gt;

&lt;p&gt;Cypress is using JavaScript to interact with the elements. &lt;/p&gt;

&lt;p&gt;And JavaScript can click on any element, regardless if the element is hidden or covered by another element.&lt;/p&gt;

&lt;p&gt;Can a real user do that? Definitely not.&lt;/p&gt;

&lt;p&gt;That means that your tests will always be green, but your real users might face issues.&lt;/p&gt;

&lt;p&gt;This is one of the many reasons why Selenium migrated from JavaScript to webdriver commands a long time ago.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1258152994815672320-611" src="https://platform.twitter.com/embed/Tweet.html?id=1258152994815672320"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1258152994815672320-611');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1258152994815672320&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;And that's why &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; is also using the webdriver technology:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvpkb5omk96vv7inguen.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvpkb5omk96vv7inguen.png" alt="endtest safari"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because of that, the tests can run on all major browsers, including Safari.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>5 Reasons Why You Should Perform Geolocation Testing</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Fri, 05 Nov 2021 18:02:38 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/5-reasons-why-you-should-perform-geolocation-testing-4pkl</link>
      <guid>https://dev.to/liviufromendtest/5-reasons-why-you-should-perform-geolocation-testing-4pkl</guid>
      <description>&lt;p&gt;We all know the saying "It works on my machine". It's a good practice to take the testing beyond the "It works in my country" phase.&lt;/p&gt;

&lt;p&gt;It may be dangerous to assume a website will work the same for everyone in the world.&lt;/p&gt;

&lt;p&gt;Here are 5 reasons why you should perform Geolocation Testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Using jQuery? Your website might not work in China.
&lt;/h2&gt;

&lt;p&gt;Many websites that are using jQuery tend to still load it from a Google CDN.&lt;/p&gt;

&lt;p&gt;Wait. What's a CDN?&lt;/p&gt;

&lt;p&gt;A content delivery network (CDN) refers to a geographically distributed group of servers which work together to provide fast delivery of Internet content.&lt;/p&gt;

&lt;p&gt;This means that, instead of hosting the jQuery library on your own servers, you just fetch it from a URL, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it seems these URLs cannot be accessed from China without a VPN.&lt;/p&gt;

&lt;p&gt;That means your website won't work correctly, and you'll end up like &lt;code&gt;user151496&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrwvznyvezna703jiwds.jpg" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrwvznyvezna703jiwds.jpg" alt="google cdn china"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you don't have to be as dramatic as &lt;code&gt;user151496&lt;/code&gt;: It's easier to just test instead of giving up on ever using a CDN.&lt;/p&gt;

&lt;p&gt;But maybe you're not interested in the 989 million people that have access to internet in China.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Your Checkout page is probably breaking the law in Germany.
&lt;/h2&gt;

&lt;p&gt;In Germany, it's mandatory for any Checkout section to have a Review step.&lt;/p&gt;

&lt;p&gt;Which is nice, since it gives folks a chance to double-check before making the payment.&lt;/p&gt;

&lt;p&gt;As with any law or regulation, not respecting it can lead to a crippling fine.&lt;/p&gt;

&lt;p&gt;One of the many reasons we have &lt;code&gt;Frankfurt, Germany&lt;/code&gt; as a Geolocation option in &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p3sdraikwxtieg3f73k.jpg" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p3sdraikwxtieg3f73k.jpg" alt="frankfurt germany geolocation testing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Online Betting or Gambling? It's illegal in some US states.
&lt;/h2&gt;

&lt;p&gt;There are 9 states that have strict laws for Online Betting and Gambling: Arizona, Alabama, Hawaii, Idaho, Iowa, Louisiana, Montana, Nevada and Washington State&lt;/p&gt;

&lt;p&gt;If your website offers anything resembling online gambling, you should make sure it doesn't work in those states. Unless you're willing to pay some fines or go to prison.&lt;/p&gt;

&lt;p&gt;Remember, it's the responsibility of the website owner to restrict access.&lt;/p&gt;

&lt;p&gt;This is why we offer &lt;code&gt;Seattle, US&lt;/code&gt; as a Geolocation option in &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mxj8wrilqwebpq9wvec.jpg" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mxj8wrilqwebpq9wvec.jpg" alt="seattle us geolocation testing gambling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;For those of you who are outside the US or just really bad at Geography, the city of Seattle is in the State of Washington.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Your GDPR hacks are probably messing up something.
&lt;/h2&gt;

&lt;p&gt;Remember 2018? Everyone was going bonkers about GDPR.&lt;/p&gt;

&lt;p&gt;And a lot of custom logic was added in websites and services to have a specific behaviour when being accessed from the European Union.&lt;/p&gt;

&lt;p&gt;It's a good practice to check if those GDPR patches that you added in 2018 are still working as expected.&lt;/p&gt;

&lt;p&gt;Don't forget about the GDPR fines, they are still a thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Some third party scripts just can't be trusted
&lt;/h2&gt;

&lt;p&gt;If you navigate the dependency tree of all the modules and services your website is using, it really makes you consider the risks you inherit, not to mention the exposure to left-pad type issues.&lt;/p&gt;

&lt;p&gt;We encountered a memorable situation with an &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; customer and their website.&lt;/p&gt;

&lt;p&gt;Their website was working perfectly fine for them in Netherlands, but it was literally causing the browser to freeze and crash when being accessed from a US machine.&lt;/p&gt;

&lt;p&gt;Turns out that some third party module used by their website was going crazy when being accessed from the US.&lt;/p&gt;

&lt;p&gt;And we're talking about freezing the Chrome browser on a Windows machine with &lt;code&gt;16 GB of RAM&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That issue might have never been uncovered if they never accessed their own website from outside of Europe.&lt;/p&gt;

&lt;p&gt;Originally published on the Endtest blog:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://endtest.io/guides/blog/2021/11/05/5-Reasons-Why-You-Should-Perform-Geolocation-Testing/" rel="noopener noreferrer"&gt;https://endtest.io/guides/blog/2021/11/05/5-Reasons-Why-You-Should-Perform-Geolocation-Testing/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>testing</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to test file uploads with Selenium</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Wed, 03 Nov 2021 15:47:35 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/how-to-test-file-uploads-with-selenium-2d7c</link>
      <guid>https://dev.to/liviufromendtest/how-to-test-file-uploads-with-selenium-2d7c</guid>
      <description>&lt;p&gt;I work as a Solutions Architect at &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this article, we're going to learn how to perform a file upload with Selenium.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Let's understand how a file upload works
&lt;/h3&gt;

&lt;p&gt;Here is a basic example on &lt;a href="https://filebin.net/" rel="noopener noreferrer"&gt;Filebin&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyj2ti1dfj7n1905zlhl9.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyj2ti1dfj7n1905zlhl9.png" alt="file upload"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Behind each file upload section, you will find an &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; element:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphbduivtcne91y8lexu8.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphbduivtcne91y8lexu8.png" alt="file input"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I click the &lt;code&gt;Select files to upload&lt;/code&gt; button, the native file explorer window from my OS will open and I can select a file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb14hmmkak4kcbmn1394l.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb14hmmkak4kcbmn1394l.png" alt="file upload mac"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And after I select the file and click on the &lt;code&gt;Open&lt;/code&gt; button, the local path of the file will be written in the &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;In my situation, this will be the local path of the file:&lt;br&gt;
&lt;code&gt;/Users/liviulupei/Desktop/rabbit.png&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Behind the scenes
&lt;/h3&gt;

&lt;p&gt;The browser is the one writing that local file path, not the JavaScript.&lt;/p&gt;

&lt;p&gt;Browsers do not allow JavaScript to write in &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; elements, due to Security reasons. &lt;/p&gt;

&lt;p&gt;If that restriction wouldn't exist, a website could potentially upload files from your computer, without your knowledge or permission.&lt;/p&gt;

&lt;p&gt;As an experiment, let's try to write in that input with JavaScript:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fileField&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/Users/liviulupei/Desktop/rabbit.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm5qfduw842ea6g1xusp.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm5qfduw842ea6g1xusp.png" alt="javascript file upload"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we're getting an error. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. How not to automate a file upload test
&lt;/h3&gt;

&lt;p&gt;The first instinct might be to automate the exact steps that a real user performs. &lt;/p&gt;

&lt;p&gt;But there's a major challenge in that approach.&lt;/p&gt;

&lt;p&gt;Selenium can only interact with elements from the DOM, it cannot interact with elements from the OS, such as that File Explorer window.&lt;/p&gt;

&lt;p&gt;A possible workaround for that would be to call an external script that can handle that part, such as &lt;a href="https://www.autoitscript.com/site/" rel="noopener noreferrer"&gt;AutoIT&lt;/a&gt;, &lt;a href="http://sikulix.com/" rel="noopener noreferrer"&gt;SikuliX&lt;/a&gt; or &lt;a href="https://pywinauto.readthedocs.io/en/latest/" rel="noopener noreferrer"&gt;pywinauto&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But that could introduce flakiness in your test, since things might not always look the same in that file explorer window.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The correct way
&lt;/h3&gt;

&lt;p&gt;The correct approach is to skip the file explorer window part and to write the local file path directly in the &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;JavaScript can't do that, but Selenium can, since the commands go directly through the webdriver.&lt;/p&gt;

&lt;p&gt;Let's write that Selenium command with Python:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;file_local_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/Users/liviulupei/Desktop/rabbit.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;file_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_element_by_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fileField&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;file_input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_local_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Easy, right? &lt;/p&gt;

&lt;h3&gt;
  
  
  5. In case the file input is hidden
&lt;/h3&gt;

&lt;p&gt;There are situations where the &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; element might be hidden. &lt;/p&gt;

&lt;p&gt;That is the case with most modern website designs.&lt;/p&gt;

&lt;p&gt;Selenium won't be able to interact with that element, because it can only interact with visible elements.&lt;/p&gt;

&lt;p&gt;In that situation, you would get an &lt;code&gt;Element not interactable&lt;/code&gt; error.&lt;/p&gt;

&lt;p&gt;The workaround is to execute some JavaScript code in the browser that will make the element visible:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fileField&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fileField&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That JavaScript code will actually be executed from your Python Selenium code, with the &lt;code&gt;execute_script&lt;/code&gt; method.&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="n"&gt;javascript_code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;document.querySelector...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;br&gt;
&lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;javascript_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  

&lt;ol&gt;
&lt;li&gt;Not ideal from a CI/CD perspective
&lt;/li&gt;
&lt;/ol&gt;
&lt;/h3&gt;


&lt;p&gt;Relying on a hardcoded local file path works well only if you're testing on your own machine. &lt;/p&gt;

&lt;p&gt;But most teams have their tests plugged into their CI/CD pipelines. &lt;/p&gt;

&lt;p&gt;You could implement a script that downloads the file from a repository and places it on the machine that is running the test.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. The easy way
&lt;/h3&gt;

&lt;p&gt;It's a bit easier to perform a file upload test with &lt;a href="https://endtest.io" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You just need one step: &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6z8n8yvm8xcmmrzrwagp.png" class="article-body-image-wrapper"&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6z8n8yvm8xcmmrzrwagp.png" alt="endtest file upload"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Details are provided in the &lt;a href="https://endtest.io/guides/docs/how-to-test-file-uploads/" rel="noopener noreferrer"&gt;How to test file uploads&lt;/a&gt; chapter.&lt;/p&gt;

&lt;p&gt;The file needs to be stored in the Endtest Drive (or any other system that provides a direct download link).&lt;/p&gt;

&lt;p&gt;And when the test execution starts, the file will be downloaded from the Drive onto the machine or device that the test is running on.&lt;/p&gt;

&lt;p&gt;That means it's really easy to plug the test into your CI/CD system.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>python</category>
    </item>
    <item>
      <title>5 Myths About Codeless Automation</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Fri, 11 Dec 2020 15:07:24 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/5-myths-about-codeless-automation-3ggd</link>
      <guid>https://dev.to/liviufromendtest/5-myths-about-codeless-automation-3ggd</guid>
      <description>&lt;p&gt;Let's take a trip down memory lane and look back at some of the myths that were born in the early days of codeless test automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. No flexibility
&lt;/h2&gt;

&lt;p&gt;This was, by far, the most popular myth.&lt;/p&gt;

&lt;p&gt;It dates back to the old test recorders from the early 2000s.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fseinfeld3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fseinfeld3.gif" alt="endtest sharks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it's the main reason why some folks used to reinvent the wheel and write their own internal test frameworks a few years ago.&lt;/p&gt;

&lt;p&gt;Those internal test frameworks were a nightmare to maintain and the ROI was terrible.&lt;/p&gt;

&lt;p&gt;It might be difficult to find someone who still does that in the present.&lt;/p&gt;

&lt;p&gt;But if you would ask them why, they might tell you that their scenarios are simply far too complex and they need functionalities such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If statements&lt;/li&gt;
&lt;li&gt;Loops&lt;/li&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;Reusable functions&lt;/li&gt;
&lt;li&gt;Concatenate different strings&lt;/li&gt;
&lt;li&gt;Extract values from JSON objects&lt;/li&gt;
&lt;li&gt;Extract values from arrays&lt;/li&gt;
&lt;li&gt;Extract values from CSV files&lt;/li&gt;
&lt;li&gt;Connect to databases and execute SQL queries&lt;/li&gt;
&lt;li&gt;Send API requests&lt;/li&gt;
&lt;li&gt;Chain together multiple API requests&lt;/li&gt;
&lt;li&gt;Handle iframes, Shadow DOM, multiple browser tabs&lt;/li&gt;
&lt;li&gt;Read and write cookies&lt;/li&gt;
&lt;li&gt;Access the page source and the browser logs&lt;/li&gt;
&lt;li&gt;Execute JavaScript code snippets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The truth is that Codeless Automation tools do support all of those functionalities.&lt;/p&gt;

&lt;p&gt;At least &lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; does.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Editing is difficult
&lt;/h2&gt;

&lt;p&gt;Another myth that dates back to the early 2000s.&lt;/p&gt;

&lt;p&gt;If someone wanted to edit a recorded test, they had to record it again.&lt;/p&gt;

&lt;p&gt;Things are different nowadays, editing is easy:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fedit_test_animation.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fedit_test_animation.gif" alt="endtest edit test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This makes codeless tests more stable and easier to manage than classic Selenium Webdriver tests&lt;/p&gt;

&lt;p&gt;If you can still find someone who believes that they need to record the entire test case again or edit the actual code if something changes, please let them know it's not 2005 anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Collaboration is difficult
&lt;/h2&gt;

&lt;p&gt;The old test recording tools were Desktop tools.&lt;/p&gt;

&lt;p&gt;This means that anything you created was stored on your computer.&lt;/p&gt;

&lt;p&gt;Syncing your work with your colleagues was a nightmare.&lt;/p&gt;

&lt;p&gt;This led some folks to the following conclusion:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"We need to write code, because we need to put it in a git."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fseinfeld2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fseinfeld2.gif" alt="endtest collaboration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fortunately, modern Codeless Automation tools are cloud solutions.&lt;/p&gt;

&lt;p&gt;This means that anything you create is stored directly in the cloud and you can easily grant access to other team members, use versioning, branches and sync your work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt; even offers an &lt;a href="https://endtest.io/guides/docs/automatic-backup/" rel="noopener noreferrer"&gt; Automatic Backup&lt;/a&gt;&lt;a&gt;&lt;/a&gt; functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. It's too expensive
&lt;/h2&gt;

&lt;p&gt;In the early 2000s, due to a lack of knowledge and in an attempt to cut spendings, some teams or companies decided to use only open source solutions.&lt;/p&gt;

&lt;p&gt;Not because they took an interest in the community and they wanted to add their contribution, but simply because open source solutions are free.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fopen_source_translation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fopen_source_translation.png" alt="endtest open source"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That principle can no longer be applied, because most modern tools are in the cloud.&lt;/p&gt;

&lt;p&gt;If someone asks if a cloud solution is open source, it means that they're not aware of the differences between a library and a cloud solution.&lt;/p&gt;

&lt;p&gt;Using a cloud solution helps a company save money, because they no longer have to build their own internal tool by stitching together different libraries.&lt;/p&gt;

&lt;p&gt;Let's take a look at an example.&lt;/p&gt;

&lt;p&gt;Company A and Company B decide that they need a video conferencing tool because they want to host webinars.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fwebinar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fwebinar.png" alt="endtest webinar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After doing some research, Company A decides that they are going to use &lt;a href="https://zoom.us/" rel="noopener noreferrer"&gt;Zoom&lt;/a&gt;, paying $19 per month.&lt;/p&gt;

&lt;p&gt;Company B wants to save money, so they look for open source options. They decide to use &lt;a href="https://webrtc.org/" rel="noopener noreferrer"&gt;WebRTC&lt;/a&gt;, an open source project that allows you to build real-time communication apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Company A now has a stable video conferencing tool and they start hosting webinars.&lt;/p&gt;

&lt;p&gt;Company B starts building their own video conferencing tool by stitching together WebRTC and other libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 months later:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Company A has already hosted an impressive number of webinars, without encountering issues.&lt;/p&gt;

&lt;p&gt;Company B is still working on their own video conferencing tool, they assigned 3 Software Engineers to that project. It's almost ready, but it will take time until they'll have advanced features and there's no way of knowing if it will be reliable enough.&lt;/p&gt;

&lt;p&gt;If you do the math, you'll see that Company B actually spent a lot more money compared to Company A, but they didn't get any return on their investment yet.&lt;/p&gt;

&lt;p&gt;That's because those 3 Software Engineers have salaries, which are definitely more than $19 per month.&lt;/p&gt;

&lt;p&gt;Company B also missed out on plenty of opportunities during those 6 months when they didn't host any webinars.&lt;/p&gt;

&lt;p&gt;You can apply the same logic when comparing an open source library such as Selenium and a tool like &lt;a href="https://endtest.io/" rel="noopener noreferrer"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Vendor lock-in
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fmoney_money.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fmoney_money.gif" alt="endtest webinar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take a look at the definition:&lt;/p&gt;

&lt;p&gt;Vendor lock-in, also known as proprietary lock-in or customer lock-in, makes a customer dependent on a vendor for products and services, unable to use another vendor without substantial switching costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fliving_in_the_past.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fendtest.io%2Fimages%2Fliving_in_the_past.gif" alt="endtest selenium"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modern legislation like GDPR and HIPAA makes it mandatory for vendors to provide flexible data migration options.&lt;/p&gt;

&lt;p&gt;Your data is your data and you have the right to take it wherever you want.&lt;/p&gt;

&lt;p&gt;Just make sure to review the &lt;a href="https://endtest.io/privacy/" rel="noopener noreferrer"&gt;Privacy Policy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Originally published &lt;a href="https://endtest.io/guides/blog/2020/12/11/5-myths-about-codeless-automation/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Will cross-browser testing still be relevant in 2021?</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Mon, 07 Dec 2020 11:22:24 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/will-cross-browser-testing-still-be-relevant-in-2021-5a32</link>
      <guid>https://dev.to/liviufromendtest/will-cross-browser-testing-still-be-relevant-in-2021-5a32</guid>
      <description>&lt;p&gt;If you're a developer, most of your time is spent on building and improving functionalities. &lt;/p&gt;

&lt;p&gt;It's easy to forget that not everyone is using Chrome.&lt;/p&gt;

&lt;p&gt;I recently spotted a major cross-browser bug on LinkedIn.&lt;/p&gt;

&lt;p&gt;This is how the &lt;strong&gt;Interests&lt;/strong&gt; section looks like on Chrome:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tg20hqux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nz4oa06nxldd8zxzn3bt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tg20hqux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nz4oa06nxldd8zxzn3bt.png" alt="Linkedin Chrome"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this is how it looks like on Firefox:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k4Jgu1Ov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xd7yqn1aaroa6uw9m8fu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k4Jgu1Ov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xd7yqn1aaroa6uw9m8fu.png" alt="Linkedin Firefox"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It gets worse if you click on the &lt;strong&gt;See all&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;Chrome: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r_KXOHwO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4retmkj827sxaj4k5hfk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r_KXOHwO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4retmkj827sxaj4k5hfk.png" alt="Chrome"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Firefox:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_fUTkxz3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/71secy8kv0c22vmr3de3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_fUTkxz3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/71secy8kv0c22vmr3de3.png" alt="Firefox"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll find plenty of articles online about how LinkedIn has a complex workflow with scalable technologies to deliver to best experience for their users. &lt;/p&gt;

&lt;p&gt;Not even the latest and most scalable frontend technologies can prevent cross-browser issues from appearing.&lt;/p&gt;

&lt;p&gt;Nowadays, it's a lot easier to &lt;a href="https://endtest.io/guides/docs/how-to-create-web-tests/"&gt;build automated tests&lt;/a&gt; than it was 5 years ago.&lt;/p&gt;

&lt;p&gt;A defect like the one I just showed you could have been easily prevented with a simple &lt;a href="https://endtest.io/guides/docs/computer-vision/"&gt;automated visual test&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>9 Characteristics of a Bad Software Tester</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Thu, 26 Nov 2020 17:28:37 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/7-characteristics-of-a-bad-tester-53b4</link>
      <guid>https://dev.to/liviufromendtest/7-characteristics-of-a-bad-tester-53b4</guid>
      <description>&lt;p&gt;I'm Liviu, and I work as a Solutions Architect at &lt;a href="https://endtest.io"&gt;Endtest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can easily find advice on what to do to be a better tester.&lt;/p&gt;

&lt;p&gt;Here is a list on what not to do:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Not knowing enough about the product.
&lt;/h2&gt;

&lt;p&gt;Testers can be the bridge between the business side and the technical side. &lt;/p&gt;

&lt;p&gt;A good tester is also a power user and is familiar with all the workflows and the corner cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Not testing on all major browsers.
&lt;/h2&gt;

&lt;p&gt;Not everyone is using Chrome, I can't stress this enough. &lt;/p&gt;

&lt;p&gt;Safari has an 18% market share and lots of folks are still using Internet Explorer.&lt;/p&gt;

&lt;p&gt;It doesn't matter if your product is built with React, Vue or Angular, there is no library or framework that can eliminate &lt;a href="https://endtest.io/guides/docs/how-to-execute-web-tests/"&gt;cross-browser&lt;/a&gt; issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Not automating.
&lt;/h2&gt;

&lt;p&gt;Relying only on manual testing is unacceptable. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mCLfwTYf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n3w5aosnxxxbuyblt6sm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mCLfwTYf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n3w5aosnxxxbuyblt6sm.gif" alt="traffic cam automation" width="397" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Automated tests are the best way to make sure that everything is working as expected, without breaking a sweat.&lt;/p&gt;

&lt;p&gt;Don't know where to start? Start here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://endtest.io/guides/docs/how-to-create-web-tests/"&gt;How to create Web Tests&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://endtest.io/guides/docs/how-to-create-mobile-tests/"&gt;How to create Mobile Tests&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Not showing empathy.
&lt;/h2&gt;

&lt;p&gt;Finding a bug doesn't have to turn into a blame game. &lt;/p&gt;

&lt;p&gt;Don't be arrogant or patronizing. &lt;/p&gt;

&lt;p&gt;Bugs are a normal byproduct of software development.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Not casting a wide net.
&lt;/h2&gt;

&lt;p&gt;Even the smallest change applied to a software product can cause a ripple effect and break functionalities which might seem completely unrelated. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ljPizy_S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8wxmvdco8hbo4p4kzltd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ljPizy_S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8wxmvdco8hbo4p4kzltd.gif" alt="breaking change" width="300" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't test only around the change, go beyond that.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Not testing all the way.
&lt;/h2&gt;

&lt;p&gt;You're familiar with mocks, drivers and stubs, but you should never have complete faith in them.&lt;/p&gt;

&lt;p&gt;If you're testing a workflow that sends an email or a text message, make sure that you test them as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://endtest.io/guides/docs/how-to-test-emails/"&gt;How to test emails&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://endtest.io/guides/docs/read-sms/"&gt;How to test SMS messages&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Not providing enough details in the reports.
&lt;/h2&gt;

&lt;p&gt;No one likes to read a vague bug report. &lt;/p&gt;

&lt;p&gt;Always include the following items:&lt;br&gt;
• description&lt;br&gt;
• steps to reproduce&lt;br&gt;
• the expected result&lt;br&gt;
• the actual result&lt;/p&gt;

&lt;p&gt;Don't hesitate to include:&lt;br&gt;
• screenshots&lt;br&gt;
• video recordings&lt;br&gt;
• logs&lt;/p&gt;
&lt;h2&gt;
  
  
  8. Not brushing up on the latest tools.
&lt;/h2&gt;

&lt;p&gt;For example, an &lt;a href="https://endtest.io/"&gt;intelligent test automation&lt;/a&gt; tool can make your life easier. &lt;/p&gt;

&lt;p&gt;Don't reinvent the wheel.&lt;/p&gt;

&lt;p&gt;Familiar with the &lt;strong&gt;KISS&lt;/strong&gt; principle?&lt;/p&gt;

&lt;p&gt;It stands for &lt;strong&gt;Keep it simple, stupid&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can check out this video where I compare Selenium with Codeless Automation:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uJSC_YwXYZw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I'm comparing them by using the following criteria:&lt;br&gt;
• ease of use&lt;br&gt;
• flexibility&lt;br&gt;
• collaboration&lt;br&gt;
• cross-browser capabilities&lt;br&gt;
• implementation cost&lt;br&gt;
• end to end capabilities&lt;br&gt;
• reliability&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Not wanting to learn more.
&lt;/h2&gt;

&lt;p&gt;Even if you're not writing code, that doesn't mean that you shouldn't be familiar with the basic concepts. &lt;/p&gt;

&lt;p&gt;A good tester should be familiar with:&lt;br&gt;
• HTML&lt;br&gt;
• CSS&lt;br&gt;
• JavaScript&lt;br&gt;
• HTTP Request Methods&lt;br&gt;
• Linux Commands&lt;br&gt;
• SQL&lt;/p&gt;

&lt;p&gt;A good place to start learning those is &lt;a href="https://www.w3schools.com/"&gt;W3Schools&lt;/a&gt;.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn.
&lt;/h2&gt;

&lt;p&gt;Which one of these are you currently doing?&lt;/p&gt;

&lt;p&gt;Write a comment below and tell me all about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oYeSdHoI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/esw1dbaxgbl9y6iylr54.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oYeSdHoI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/esw1dbaxgbl9y6iylr54.gif" alt="security testing" width="220" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Selenium vs. Codeless Automation</title>
      <dc:creator>Liviu Lupei</dc:creator>
      <pubDate>Tue, 24 Nov 2020 18:47:03 +0000</pubDate>
      <link>https://dev.to/liviufromendtest/selenium-vs-codeless-automation-5fli</link>
      <guid>https://dev.to/liviufromendtest/selenium-vs-codeless-automation-5fli</guid>
      <description></description>
      <category>webdev</category>
      <category>testing</category>
      <category>python</category>
    </item>
  </channel>
</rss>
