#!/usr/bin/env python # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # pylint: disable=import-error,no-member from __future__ import print_function import os import sys import unittest from typing import Callable, List from sauceclient import SauceClient from appium import webdriver SAUCE_USERNAME = os.environ.get('SAUCE_USERNAME') SAUCE_ACCESS_KEY = os.environ.get('SAUCE_ACCESS_KEY') sauce = SauceClient(SAUCE_USERNAME, SAUCE_ACCESS_KEY) def on_platforms(platforms: List[str]) -> Callable[[type], None]: def decorator(base_class: type) -> None: module = sys.modules[base_class.__module__].__dict__ for i, platform in enumerate(platforms): name = "%s_%s" % (base_class.__name__, i + 1) d_caps = {'desired_capabilities': platform} module[name] = type(name, (base_class,), d_caps) return decorator class SauceTestCase(unittest.TestCase): def setUp(self) -> None: self.desired_capabilities['name'] = self.id() # type: ignore sauce_url = "http://%s:%[email protected]:80/wd/hub" self.driver = webdriver.Remote( desired_capabilities=self.desired_capabilities, # type: ignore command_executor=sauce_url % (SAUCE_USERNAME, SAUCE_ACCESS_KEY) ) self.driver.implicitly_wait(30) def tearDown(self) -> None: print("Link to your job: https://saucelabs.com/jobs/%s" % self.driver.session_id) try: if sys.exc_info() == (None, None, None): sauce.jobs.update_job(self.driver.session_id, passed=True) else: sauce.jobs.update_job(self.driver.session_id, passed=False) finally: self.driver.quit()