CodeGym /Courses /Python SELF EN /Ending work and testing the script

Ending work and testing the script

Python SELF EN
Level 36 , Lesson 4
Available

1. Ending the session

How to properly end a browser session

So, you’ve got this amazing script collecting data, clicking buttons, and doing a bunch of magical things in the browser. Now it’s important to properly finish it up. Imagine your browser is a slow elephant: you can’t just slam the door and walk away. You need to politely and calmly end its work. Use the quit() method for that.

Python

from selenium import webdriver

# Initializing the browser driver
driver = webdriver.Chrome()

# here your browsing magic happens... 🧙‍♂️

# Ending the browser session
driver.quit()

The quit() method closes all browser windows and ends its work. If you forget to call it, weird things like background open browsers and mysterious memory leaks might start to happen. And let’s admit it, everyone wants a happy life, right?

Fixing issues with hanging browser processes

Sometimes, after working with Selenium, browser processes remain lingering in the background, like indecisive units in a real-time strategy game. This might happen if your script "crashed" somewhere in the middle. One way to deal with this is by killing processes in batch, for example, using psutil in Python or other system commands.

Python

import psutil

# Killing all hanging Chrome processes
for proc in psutil.process_iter():
    # Checking if the process belongs to the browser
    if 'chrome' in proc.name().lower():
        proc.kill()

It’s not the most elegant solution, but sometimes there’s no other choice if processes become uncontrollable. Just remember this will kill all browser processes, so use it with a good dose of common sense.

2. Testing the script

Verifying the correctness of all steps in the scenario

Successfully ending the script is only half the job. It’s important to check if every step executes correctly. For this, software testing tools like unittest or pytest are perfect. You can write tests to verify your script opens pages, clicks buttons, and collects data correctly.

Let’s look at a minimalist test using unittest:

Python

import unittest
from selenium import webdriver

class TestBrowserAutomation(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_open_page(self):
        self.driver.get("https://example.com")
        self.assertEqual("Example Domain", self.driver.title)

    def tearDown(self):
        self.driver.quit()

unittest.main()

This test checks that our script opens the page https://example.com and the page title matches expectations. It’s a simple but powerful way to ensure the key parts of your script are working right.

Debugging and optimization

Sometimes, even after writing tests, your script behaves like a moody child, refusing to work properly. That’s where debugging comes in. Use print() to output intermediate values and trace where things are going wrong. Sprinkling fun comments in your code is, of course, welcome, but don’t lose sight of the goal: to understand what’s happening.

For example, let’s say you’re facing an issue where some_element is missing on the page:

Python

try:
    some_element = driver.find_element_by_id('missing-id')
except Exception as e:
    print(f"Whoops! Something went wrong: {e}")

Also, keep a close eye on the performance of your script. Sometimes, optimizing work might involve strategies like reducing the frequency of requests or optimizing element search logic.

Preventing crashes and errors in the future

After optimization and debugging, your script should work flawlessly, like a Swiss watch, but there’s always a risk of new issues popping up. You can use logging systems like logging to record what’s happening in your script. This will help pinpoint where and why something went wrong.

Python

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info("Script started")

# log more actions here...

logger.info("Script ended")

Remember, it’s always a good idea to prepare for unexpected events, especially when working with unstable data or pages. Consider adding retry mechanisms and timeouts to ensure the script doesn’t crash at the slightest hiccup.

1
Task
Python SELF EN, level 36, lesson 4
Locked
Ending a Browser Session
Ending a Browser Session
2
Task
Python SELF EN, level 36, lesson 4
Locked
Closing stuck browser processes
Closing stuck browser processes
3
Task
Python SELF EN, level 36, lesson 4
Locked
Writing Unit Tests for Browser Automation
Writing Unit Tests for Browser Automation
4
Task
Python SELF EN, level 36, lesson 4
Locked
Logging and Debugging in Automation Scripts
Logging and Debugging in Automation Scripts
1
Survey/quiz
Working with Forms, level 36, lesson 4
Unavailable
Working with Forms
Working with Forms
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION