76 lines
3 KiB
Python
Executable file
76 lines
3 KiB
Python
Executable file
#!/usr/bin/python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import platform
|
|
from selenium import webdriver
|
|
from selenium.webdriver.common.keys import Keys
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
|
|
if __name__ == '__main__':
|
|
options = webdriver.firefox.options.Options()
|
|
options.binary_location = "/usr/bin/firefox"
|
|
options.add_argument("-headless")
|
|
|
|
# Starting with Firefox 89, search is handed off to the address bar by
|
|
# default (see https://bugzilla.mozilla.org/1699834). Since Selenium
|
|
# doesn't allow interacting with the address bar, this test can only work
|
|
# by reverting to the old behaviour. If/when this preference is removed,
|
|
# this test will also need to be removed.
|
|
options.set_preference(
|
|
"browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar",
|
|
False)
|
|
|
|
driver = webdriver.Firefox(options=options)
|
|
|
|
if platform.machine() == "armv7l":
|
|
# Override the User Agent string so that Google search doesn't serve
|
|
# mobile content (https://launchpad.net/bugs/1923090)
|
|
uastring = driver.execute_script("return navigator.userAgent;")
|
|
driver.quit()
|
|
options.set_preference("general.useragent.override",
|
|
uastring.replace("armv7l", "armv8l"))
|
|
driver = webdriver.Firefox(options=options)
|
|
|
|
# The following search engines are expected to be present for every locale,
|
|
# and their label and netloc locale-independent
|
|
expected_engines = [
|
|
{'label': "Google", 'netloc': "www.google.com",
|
|
'params': {"client": "ubuntu"}},
|
|
{'label': "DuckDuckGo", 'netloc': "duckduckgo.com",
|
|
'params': {"t": "ffab"}},
|
|
]
|
|
|
|
search_settings_page = "about:preferences#search"
|
|
homepage = "about:home"
|
|
|
|
def print_engines(prefix, engines):
|
|
print("{}{}".format(prefix,
|
|
", ".join(["[{}]".format(e) for e in engines])))
|
|
|
|
for i, v in enumerate(expected_engines):
|
|
driver.get(search_settings_page)
|
|
selector = driver.find_element_by_id("defaultEngine")
|
|
count = int(selector.get_attribute("itemCount"))
|
|
expected = v['label']
|
|
i = 0
|
|
while (selector.get_attribute("label") != expected) and (i < count):
|
|
i = i + 1
|
|
selector.send_keys(Keys.ARROW_DOWN)
|
|
assert selector.get_attribute("label") == expected, \
|
|
"Search engine not found: {}".format(expected)
|
|
|
|
driver.get(homepage)
|
|
driver.find_element_by_id("newtab-search-text").send_keys("foobarbaz")
|
|
driver.find_element_by_id("searchSubmit").click()
|
|
WebDriverWait(driver, 10).until(EC.url_changes(homepage))
|
|
print("search URL for {}: {}".format(expected, driver.current_url))
|
|
url = urlparse(driver.current_url)
|
|
assert url.netloc == v['netloc']
|
|
query = parse_qs(url.query)
|
|
for pk, pv in v['params'].items():
|
|
assert query[pk] == [pv]
|
|
|
|
driver.quit()
|