Drive Google Map Address validation with Selenium WebDriver

How to use Selenium WebDriver to select and validate a Google Map address

Courtney Zhan
2 min readMar 19, 2023

--

Integrating Google Maps to validate an address is a common feature on web pages. This article shows how to automate that in raw Selenium WebDriver.

Table of Contents:
·
Test Design
Execution (Video)
·
Test Script:
Refinement
Refactoring
·
Zhimin’s Notes

Test Design:

Quite straightforward.

  1. Find the address text field element, and clear it first.
    In case it was not empty.
  2. Typing in the new address to the element.
    Don’t need to be the full address, as Google maps will try to auto-complete it.
  3. Send down keys (to the same element) repeatedly until the desired entry is highlighted.
    Add a minor delay to let JS complete the operation.
  4. Send tab key
    Add delays to JS to set GPS data, if the web page had the placeholders for them.

Execution (Video)

Running the test steps in TestWise

Astute readers might notice that I ran the selenium steps, directly against the current browser window. This is a great feature of TestWise. For more, check out this article, attach test execution to the existing browser.

Test Script:

The raw Selenium steps to perform the above operations in the wonderful Ruby language.

elem = driver.find_element(:id, "user_address")
elem.clear
elem.send_keys("10 ruby new")
sleep 0.8 # wait for JavaScript dropdown to appear
elem.send_keys(:down)
sleep 0.5 # wait for JavaScript to select next address
elem.send_keys(:down)
sleep 0.5
elem.send_keys(:down)
sleep 0.5
elem.send_keys(:down)
sleep 0.5
elem.send_keys(:tab)
sleep 0.8 # wait for drop down to close and set GPS data

Refinement:

There are duplications (four down keys). Shorten that in a loop.

4.times { elem.send_keys(:down); sleep 0.5 }

Refactoring:

Once the test step(s) are working, I immediately refactor them into a Page Class, to make it more readable and maintainable.

class UserProfilePage < AbstractPage
def enter_user_address(addr)
elem = driver.find_element(:id, "user_address")
elem.clear
elem.send_keys(addr)
sleep 0.8
4.times { elem.send_keys(:down); sleep 0.5 } # select the 4th address
elem.send_keys(:tab)
sleep 0.8
end
end

The usage will be like the following:

user_profile_page = UserProfilePage.new(driver)
user_profile_page.enter_user_address("10 ruby new")

For more, check the articles:

--

--