foxpuppet/windows/browser/urlbar.py (27 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
"""Creates Navbar object to interact with Firefox URL Bar."""
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from foxpuppet.region import Region
class UrlBar(Region):
def suggestions(self, url: str) -> list[str]:
"""
Get all URL suggestions shown in the URL bar.
Args:
url (str): The URL to type into the URL bar
Returns:
list[str]: List of suggested URLs that appear in the URL bar
"""
with self.selenium.context(self.selenium.CONTEXT_CHROME):
url_bar = self.selenium.find_element(*URLBarLocators.INPUT_FIELD)
url_bar.clear()
url_bar.send_keys(url)
self.wait.until(
lambda _: self.selenium.find_elements(*URLBarLocators.SEARCH_RESULTS)
)
search_results = self.selenium.find_elements(
*URLBarLocators.SEARCH_RESULT_ITEMS
)
suggested_urls = [
result.find_element(*URLBarLocators.SEARCH_RESULT_ITEM).text
for result in search_results
if result.find_element(*URLBarLocators.SEARCH_RESULT_ITEM).text
]
return suggested_urls
class URLBarLocators:
INPUT_FIELD = (By.ID, "urlbar-input")
SEARCH_RESULTS = (By.ID, "urlbar-results")
SEARCH_RESULT_ITEM = (By.CSS_SELECTOR, "span.urlbarView-url")
SEARCH_RESULT_ITEMS = (By.CSS_SELECTOR, "div.urlbarView-row[role='presentation']")