Skip to content

Commit a6e091c

Browse files
committed
Use saucelabs in test_frontend
1 parent 083bb99 commit a6e091c

File tree

1 file changed

+71
-18
lines changed

1 file changed

+71
-18
lines changed

tests/test_frontend.py

Lines changed: 71 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import sys
23
from pathlib import Path
34
from time import sleep
@@ -17,30 +18,82 @@
1718
assets_dir = this_dir / "test_frontend_assets"
1819
assets_dir.mkdir(exist_ok=True)
1920

21+
sauce_tunnel = os.environ.get("SAUCE_TUNNEL")
2022

21-
def test_frontend():
22-
options = Options()
23-
options.add_argument("--headless")
24-
options.add_argument("--disable-gpu")
25-
desired_capabilities = DesiredCapabilities.CHROME
26-
desired_capabilities["goog:loggingPrefs"] = {"browser": "ALL"}
27-
driver = webdriver.Chrome(
28-
options=options, desired_capabilities=desired_capabilities
29-
)
23+
24+
def get_driver(caps):
25+
if sauce_tunnel:
26+
desired_capabilities = {
27+
**caps,
28+
"sauce:options": {
29+
"tunnelName": sauce_tunnel,
30+
"name": "futurecoder",
31+
},
32+
}
33+
url = "https://{SAUCE_USERNAME}:{SAUCE_ACCESS_KEY}@ondemand.eu-central-1.saucelabs.com:443/wd/hub".format(
34+
**os.environ
35+
)
36+
driver = webdriver.Remote(
37+
command_executor=url,
38+
desired_capabilities=desired_capabilities,
39+
)
40+
else:
41+
options = Options()
42+
options.add_argument("--headless")
43+
options.add_argument("--disable-gpu")
44+
desired_capabilities = DesiredCapabilities.CHROME
45+
desired_capabilities["goog:loggingPrefs"] = {"browser": "ALL"}
46+
driver = webdriver.Chrome(
47+
options=options, desired_capabilities=desired_capabilities
48+
)
3049
driver.set_window_size(1024, 768)
3150
driver.implicitly_wait(5)
51+
return driver
52+
53+
54+
def params():
55+
if not sauce_tunnel:
56+
yield None
57+
return
58+
for os_name, extra_browser, os_versions in [
59+
["Windows", "MicrosoftEdge", ["11", "10"]],
60+
["macOS", "Safari", ["12", "11.00"]],
61+
]:
62+
for os_version in os_versions[:1]: # TODO use all versions
63+
for browser in ["Chrome", "Firefox", extra_browser]:
64+
caps = dict(
65+
platform=f"{os_name} {os_version}",
66+
version="latest",
67+
browserName=browser,
68+
)
69+
if browser == "Safari" and os_version == "12":
70+
yield caps | {"version": "15"}
71+
else:
72+
yield caps
73+
return # TODO
74+
75+
76+
@pytest.mark.parametrize("caps", list(params()))
77+
def test_frontend(caps):
78+
driver = get_driver(caps)
79+
status = "failed"
3280
try:
3381
_tests(driver)
82+
status = "passed"
3483
finally:
35-
driver.save_screenshot(str(assets_dir / "screenshot.png"))
36-
(assets_dir / "logs.txt").write_text(
37-
"\n".join(entry["message"] for entry in driver.get_log("browser"))
38-
)
39-
(assets_dir / "page_source.html").write_text(driver.page_source)
40-
(assets_dir / "state.json").write_text(
41-
driver.execute_script("return JSON.stringify(reduxStore.getState())")
42-
)
43-
driver.close()
84+
if sauce_tunnel:
85+
driver.execute_script(f"sauce:job-result={status}")
86+
try:
87+
driver.save_screenshot(str(assets_dir / "screenshot.png"))
88+
(assets_dir / "logs.txt").write_text(
89+
"\n".join(entry["message"] for entry in driver.get_log("browser"))
90+
)
91+
(assets_dir / "page_source.html").write_text(driver.page_source)
92+
(assets_dir / "state.json").write_text(
93+
driver.execute_script("return JSON.stringify(reduxStore.getState())")
94+
)
95+
finally:
96+
driver.quit()
4497

4598

4699
def _tests(driver):

0 commit comments

Comments
 (0)