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()
Exemple #2
0
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
Exemple #3
0
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()