1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#!/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": "ffhp"}},
]
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()
|