Selenium for Python Tutorial

Getting Started with Applitools

Want to learn more about the Applitools platform and how it works? First get started with one of the following:

Running Tests with Applitools

Prerequisites
  1. A free Applitools account and Applitools API KEY

Tip: Unsure how to set up your API key?

Learn how to get started at Setting Up

  1. Python 3 https://realpython.com/installing-python/

  2. Git https://git-scm.com​

Note: Installing `git` is optional

Installing git is used to clone the demo project from the Github repository. Instead of installing git, you can simply download the Zip file from the repository. Further, if you are Mac, you already have git.

  1. Google Chrome Browser https://www.google.com/chrome/

  2. ChromeDriver https://chromedriver.chromium.org/getting-started

ChromeDriver must be installed and in your `PATH`

Below are some resources from the internet that'll help you

On Mac, place the chromedriver executable in /usr/local/bin folder so Eclipse and IntelliJ can find it.

Option 1 - Run With The Ultrafast Grid
  1. Clone or download the repository and navigate to that folder
git clone https://github.com/applitools/tutorial-selenium-python-ultrafastgrid.git
cd tutorial-selenium-python-ultrafastgrid
1
2

Note: you can alternatively download the project as a Zip file and extract it

  1. Install the dependencies
pip3 install -r requirements.txt
1
  1. Run the example test
APPLITOOLS_API_KEY="[Your API Key]" pytest ultrafastgrid_demo.py
1

This will first set your APPLITOOLS_API_KEY into the node process then run pytest tutorial.py.

Running from an IDE

Start PyCharm, open just cloned project, set project interpreter by File > Settings > Project: > Project Interpreter choose interpreter by dropdown box; tap Run and choose ultrafastgrid_demo.

Adding Applitools Eyes to an Existing Project

Example Test

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver import Chrome
import os


from applitools.selenium import (
    logger,
    VisualGridRunner,
    Eyes,
    Target,
    BatchInfo,
    BrowserType,
    DeviceName,
)


def set_up(eyes):

    # You can get your api key from the Applitools dashboard
    eyes.configure.set_api_key("APPLITOOLS_API_KEY")

    # create a new batch info instance and set it to the configuration
    eyes.configure.set_batch(BatchInfo("Ultrafast Batch"))

    # Add browsers with different viewports
    # Add mobile emulation devices in Portrait mode
    (
        eyes.configure.add_browser(800, 600, BrowserType.CHROME)
        .add_browser(700, 500, BrowserType.FIREFOX)
        .add_browser(1600, 1200, BrowserType.IE_11)
        .add_browser(1024, 768, BrowserType.EDGE_CHROMIUM)
        .add_browser(800, 600, BrowserType.SAFARI)
        .add_device_emulation(DeviceName.iPhone_X)
        .add_device_emulation(DeviceName.Pixel_2)
    )


def ultra_fast_test(web_driver, eyes):
    try:
        # Navigate to the url we want to test
        web_driver.get("https://demo.applitools.com")

        # Call Open on eyes to initialize a test session
        eyes.open(
            web_driver, "Demo App", "Ultrafast grid demo", {"width": 800, "height": 600}
        )

        # check the login page with fluent api, see more info here
        # https://applitools.com/docs/topics/sdk/the-eyes-sdk-check-fluent-api.html
        eyes.check("", Target.window().fully().with_name("Login page"))

        web_driver.find_element_by_id("log-in").click()

        # Check the app page
        eyes.check("", Target.window().fully().with_name("App page"))

        # Call Close on eyes to let the server know it should display the results
        eyes.close_async()
    except Exception as e:
        eyes.abort_async()
        print(e)


def tear_down(web_driver, runner):
    # Close the browser
    web_driver.quit()

    # we pass false to this method to suppress the exception that is thrown if we
    # find visual differences
    all_test_results = runner.get_all_test_results(False)
    print(all_test_results)


# Create a new chrome web driver
web_driver = Chrome(ChromeDriverManager().install())

# Create a runner with concurrency of 1
runner = VisualGridRunner(1)

# Create Eyes object with the runner, meaning it'll be a Visual Grid eyes.
eyes = Eyes(runner)

set_up(eyes)

try:
    # ⭐️ Note to see visual bugs, run the test using the above URL for the 1st run.
    # but then change the above URL to https://demo.applitools.com/index_v2.html
    # (for the 2nd run)
    ultra_fast_test(web_driver, eyes)
finally:
    tear_down(web_driver, runner)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Option 2 - Run Locally
  1. Clone or download the repository and navigate to that folder
git clone https://github.com/applitools/tutorial-selenium-python.git
cd tutorial-selenium-python
1
2

Note: you can alternatively download the project as a Zip file and extract it

  1. Install the dependencies
pip3 install -r requirements.txt
1
  1. Run the example test
APPLITOOLS_API_KEY="[Your API Key]" pytest tutorial.py
1

This will first set your APPLITOOLS_API_KEY into the node process then run pytest tutorial.py.

Running from an IDE

Start PyCharm, open just cloned project, set project interpreter by File > Settings > Project: > Project Interpreter choose interpreter by dropdown box; tap Run and choose ultrafastgrid_demo.

Adding Applitools Eyes to an Existing Project

Example Test

import os
import pytest

from selenium import webdriver
from applitools.selenium import Eyes, Target, BatchInfo, ClassicRunner
from webdriver_manager.chrome import ChromeDriverManager


@pytest.fixture(scope="module")
def batch_info():
    """
    Use one BatchInfo for all tests inside module
    """
    return BatchInfo("Some general Test cases name")


@pytest.fixture(name="driver", scope="function")
def driver_setup():
    """
    New browser instance per test and quite.
    """
    driver = webdriver.Chrome(ChromeDriverManager().install())
    yield driver
    # Close the browser.
    driver.quit()


@pytest.fixture(name="runner", scope="session")
def runner_setup():
    """
    One test runner for all tests. Print test results in the end of execution.
    """
    runner = ClassicRunner()
    yield runner
    all_test_results = runner.get_all_test_results()
    print(all_test_results)


@pytest.fixture(name="eyes", scope="function")
def eyes_setup(runner, batch_info):
    """
    Basic Eyes setup. It'll abort test if wasn't closed properly.
    """
    eyes = Eyes(runner)
    # Initialize the eyes SDK and set your private API key.
    eyes.api_key = os.environ["APPLITOOLS_API_KEY"]
    eyes.configure.batch = batch_info
    yield eyes
    # If the test was aborted before eyes.close was called, ends the test as aborted.
    eyes.abort_if_not_closed()


def test_tutorial(eyes, driver):
    # Start the test and set the browser's viewport size to 800x600.
    eyes.open(driver, "Test app", "First test", {"width": 800, "height": 600})
    # Navigate the browser to the "hello world!" web-site.
    driver.get("https://demo.applitools.com")

    # Visual checkpoint #1.
    eyes.check("Login Window test", Target.window())

    # End the test.
    eyes.close(False)
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

More information

The documentation for the Applitools Eyes Selenium 3 Python SDK contains more information about advanced configuration.

Resources




Terms & Conditions Privacy Policy GDPR© 2021 Applitools. All rights reserved.

Last Updated: 6/24/2021, 10:09:59 AM