def mobile_eyes(request, eyes, ios_desired_capabilities, android_desired_capabilities): selenium_url = ( "https://{username}:{password}@ondemand.saucelabs.com:443/wd/hub". format( username=os.getenv("SAUCE_USERNAME", None), password=os.getenv("SAUCE_ACCESS_KEY", None), )) platform_name = os.getenv("TEST_PLATFORM", None) if platform_name == "Android": desired_caps = android_desired_capabilities else: desired_caps = ios_desired_capabilities mobile_driver = open_webdriver( lambda: appium_webdriver.Remote(command_executor=selenium_url, desired_capabilities=desired_caps), ) if mobile_driver is None: raise WebDriverException("Never created!") yield eyes, mobile_driver # report results try: mobile_driver.execute_script( "sauce:job-result=%s" % str(not request.node.rep_call.failed).lower()) except WebDriverException: logger.info( "Warning: The driver failed to quit properly. Check test and server side logs." ) finally: mobile_driver.quit() eyes.close()
def mobile_eyes(request, page, eyes): # configure eyes through @pytest.mark.parametrize('mobile_eyes', [], indirect=True) browser_config = copy(getattr(request, "param", {})) fully = browser_config.pop("fully", None) test_name = "{name} {plat_ver} {dev_or} {page}".format( name=browser_config["deviceName"], plat_ver=browser_config["platformVersion"], dev_or=browser_config["deviceOrientation"], page=page, ) test_suite_name = request.node.get_closest_marker("test_suite_name") test_suite_name = ( test_suite_name.args[-1] if test_suite_name else "Eyes Selenium SDK - iOS Safari Cropping" ) if fully: test_name += " fully" selenium_url = ( "https://{username}:{password}@ondemand.saucelabs.com:443/wd/hub".format( username=os.getenv("SAUCE_USERNAME", None), password=os.getenv("SAUCE_ACCESS_KEY", None), ) ) desired_caps = browser_config.copy() desired_caps["build"] = os.getenv("BUILD_TAG", None) desired_caps["tunnelIdentifier"] = os.getenv("TUNNEL_IDENTIFIER", None) desired_caps["name"] = "{} ({})".format(test_name, eyes.full_agent_id) driver = open_webdriver( lambda: appium_webdriver.Remote( command_executor=selenium_url, desired_capabilities=desired_caps ), ) eyes.stitch_mode = StitchMode.CSS eyes.add_property("Orientation", browser_config["deviceOrientation"]) eyes.add_property("Stitched", "True" if fully else "False") if driver is None: raise WebDriverException("Never created!") driver.get( "https://applitools.github.io/demo/TestPages/DynamicResolution/{}.html".format( page ) ) driver = eyes.open(driver, test_suite_name, test_name) with driver, eyes: yield eyes, fully # report results try: driver.execute_script( "sauce:job-result=%s" % str(not request.node.rep_call.failed).lower() ) except WebDriverException: pass
def driver(request, browser_config, webdriver_module): # type: (SubRequest, dict, webdriver) -> typing.Generator[dict] test_name = request.node.name test_page_url = request.node.get_closest_marker("test_page_url") test_page_url = test_page_url.args[-1] if test_page_url else None capabilities = request.node.get_closest_marker("capabilities") capabilities = capabilities.kwargs if capabilities else {} force_remote = bool(os.getenv("TEST_REMOTE", False)) if "appiumVersion" in browser_config: force_remote = True if force_remote: sauce_url = ( "https://{username}:{password}@ondemand.saucelabs.com:443/wd/hub".format( username=os.getenv("SAUCE_USERNAME", None), password=os.getenv("SAUCE_ACCESS_KEY", None), ) ) selenium_url = os.getenv("SELENIUM_SERVER_URL", sauce_url) logger.debug("SELENIUM_URL={}".format(selenium_url)) desired_caps = browser_config.copy() desired_caps["build"] = os.getenv("BUILD_TAG", None) desired_caps["tunnelIdentifier"] = os.getenv("TUNNEL_IDENTIFIER", None) desired_caps.update(capabilities) desired_caps["name"] = test_name browser = open_webdriver( lambda: webdriver_module.Remote( command_executor=selenium_url, desired_capabilities=desired_caps ), ) else: # Use local browser. Use ENV variable for driver binary or install if no one. driver_manager_class, webdriver_class, options = BROWSERS_WEBDRIVERS.get( browser_config["browserName"] ) if options: headless = strtobool(os.getenv("TEST_BROWSER_HEADLESS", "True")) options = options() options.headless = bool(headless) if driver_manager_class: browser = open_webdriver( lambda: webdriver_class( executable_path=driver_manager_class().install(), options=options, ), ) else: browser = open_webdriver(webdriver_class) if test_page_url: browser.get(test_page_url) logger.info("navigation to URL: {}".format(test_page_url)) yield browser # report results try: browser.execute_script( "sauce:job-result=%s" % str(not request.node.rep_call.failed).lower() ) except WebDriverException: # we can ignore the exceptions of WebDriverException type -> We're done with tests. logger.info( "Warning: The driver failed to quit properly. Check test and server side logs." ) finally: browser.quit()