5 Best Ways to Retrieve the Current URL in Selenium WebDriver with Python

πŸ’‘ Problem Formulation: When testing web applications using Selenium WebDriver in Python, it’s often necessary to retrieve the current URL of the browser’s active window. Whether it’s for assertion checks or to perform conditional navigation, knowing how to obtain the current URL is essential. For example, if the browser is currently on ‘https://www.example.com’, you want to capture that exact string.

Method 1: Using the current_url Property

This method involves the simple use of the built-in current_url property of the WebDriver object in Selenium. This property returns the URL of the page the browser is currently accessing.

Here’s an example:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")

current_url = driver.current_url
print(current_url)

driver.quit()

Output: ‘https://www.example.com’

The above snippet demonstrates how you can quickly retrieve the current URL by accessing the current_url property after navigating to a page. It is a direct and efficient way to get the information you need without any additional coding.

Method 2: Using WebDriver’s execute_script() Method

In some cases, you may prefer to execute JavaScript within the context of the current page to obtain the URL. The execute_script() method allows you to run JavaScript commands and retrieve their results in Python.

Here’s an example:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")

current_url = driver.execute_script("return window.location.href;")
print(current_url)

driver.quit()

Output: ‘https://www.example.com’

This snippet directly executes JavaScript to acquire the current page URL, which can be especially useful if you need to interact with the page’s JS environment or retrieve other properties in a similar fashion.

Method 3: Wrapping the URL Retrieval in a Custom Function

Creating a custom function to wrap the URL retrieval process can enhance code reusability and readability. The function can encapsulate the property access within a single, callable method.

Here’s an example:

from selenium import webdriver

def get_current_url(driver):
    return driver.current_url

driver = webdriver.Chrome()
driver.get("https://www.example.com")

current_url = get_current_url(driver)
print(current_url)

driver.quit()

Output: ‘https://www.example.com’

This code creates a function get_current_url that takes the WebDriver instance and returns the current URL. It’s a cleaner approach that’s beneficial when you need to retrieve URLs multiple times within your code.

Method 4: Accessing Current URL Within a Page Object

In the Page Object Model (POM) design pattern for Selenium tests, getting the current URL can be abstracted as a property of the page object. This way, the URL retrieval fits naturally into your test structure.

Here’s an example:

from selenium import webdriver

class ExamplePage:
    def __init__(self, driver):
        self.driver = driver

    @property
    def current_url(self):
        return self.driver.current_url

driver = webdriver.Chrome()
driver.get("https://www.example.com")

page = ExamplePage(driver)
print(page.current_url)

driver.quit()

Output: ‘https://www.example.com’

The code sample encapsulates the WebDriver within a page object class, thereby making the current_url retrieval a property of the class. This approach is aligned with good object-oriented programming practices.

Bonus One-Liner Method 5: Using a Lambda Function

If you prefer a concise approach and are comfortable with Python’s lambda functions, you can use a lambda to get the current URL in a single line of code.

Here’s an example:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")

print((lambda d: d.current_url)(driver))

driver.quit()

Output: ‘https://www.example.com’

This snippet employs a lambda function that grabs the current URL. This method is compact and can be used for quick tests or interactive sessions, but may not be as readable for those unfamiliar with lambda functions.

Summary/Discussion

  • Method 1: current_url Property. Strengths: Direct, easy to understand, and succinct. Weaknesses: Not as flexible if additional processing is needed.
  • Method 2: Using execute_script(). Strengths: Allows interaction with the JavaScript environment of the page. Weaknesses: Overkill for simple URL retrievals and slightly more verbose.
  • Method 3: Custom Function. Strengths: Promotes code reuse and readability. Weaknesses: Requires additional coding which may be unnecessary for one-time retrievals.
  • Method 4: Page Object Model. Strengths: Fits well with POM and OOP practices; enhances maintainability. Weaknesses: May introduce boilerplate when not using POM.
  • Method 5: Lambda Function. Strengths: Very concise. Weaknesses: Can be less readable and clear to those unfamiliar with lambdas.