def test_element_handles_index_error():
    driver = MockDriver()
    find = Finder(driver, None)

    element = find.element(PageElement(By.CLASS_NAME, ""))

    assert_that(element, equal_to(None),
                "None should be returned when no elements can be found")
Example #2
0
def test_select_by_index(mock_select_by_index):
    find = MockFinder()
    interact = Interactor(None, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")

    interact.select_by_index(page_element, "index to check")

    mock_select_by_index.assert_called_once_with("index to check")
Example #3
0
def test_select_by_visible_text(mock_select_by_visible_text):
    find = MockFinder()
    interact = Interactor(None, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")

    interact.select_by_visible_text(page_element, "text to check")

    mock_select_by_visible_text.assert_called_once_with("text to check")
def test_is_element_visible():
    elements = [MockElement("true")]
    finder = MockFinder(list_of_elements_to_return=elements)
    test_interrogator = Interrogator("", finder, "logger")

    test_interrogator.is_element_visible(PageElement(By.ID, "some_id"))
    assert_that(elements[0].is_displayed_called, is_(1),
                "is_displayed was not called the expected amount of times")
def test_number_of_elements():
    elements_to_return = [MockElement(), MockElement(), MockElement()]
    driver = MockDriver(elements_to_return)
    find = Finder(driver, None)

    num_elements = find.number_of_elements(PageElement(By.CLASS_NAME, ""))

    assert_that(num_elements, equal_to(3),
                "Incorrect number of elements returned")
Example #6
0
class SimpleTestPage(BasePage):
    endpoint = ""
    expected_element = PageElement(By.XPATH, "//h1[contains(.,'Overview')]")

    def go_to_page(self, base_url):
        self.interact.open_url(base_url + self.endpoint)

    def expected_element_is_visible(self):
        return self.interrogate.is_element_visible(self.expected_element)
Example #7
0
def test_send_keys():
    find = MockFinder()
    interact = Interactor(None, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")

    interact.send_keys(page_element, Keys.ARROW_LEFT)

    assert_that(find.mock_element.text, equal_to(""),
                "Key not sent to element correctly")
Example #8
0
def test_enter_text():
    find = MockFinder()
    interact = Interactor(None, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")

    interact.enter_text(page_element, "abcd", False)

    assert_that(find.mock_element.text, equal_to("abcd"),
                "Text not sent to element correctly")
def test_elements():
    driver = MockDriver()
    find = Finder(driver, None)

    elements = find.elements(PageElement(By.ID, "test-id"))

    assert_that(elements[0].info,
                equal_to("elements found by 'id' using value 'test-id'"),
                "An element list should be found")
def test_add():
    page_heading = PageElement(By.XPATH, "//*[@class='heading']")

    page_heading_link = page_heading + "//a"

    assert_that(
        page_heading_link.locator_value, equal_to("//*[@class='heading']//a"),
        "Incorrect result when adding "
        "value to existing PageElement")
Example #11
0
def test_execute_click_with_java_script():
    mock_driver = MagicMock(name="driver")
    find = MockFinder()
    interact = Interactor(mock_driver, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")

    interact.execute_click_with_java_script(page_element)

    mock_driver.execute_script.assert_called_once_with("arguments[0].click();",
                                                       find.mock_element)
def test_element():
    driver = MockDriver()
    find = Finder(driver, None)

    element = find.element(PageElement(By.CLASS_NAME, "test-class"))

    assert_that(
        element.info,
        equal_to("elements found by 'class name' using value 'test-class'"),
        "An element should be found")
Example #13
0
def test_scroll_into_view():
    mock_driver = MagicMock(name="driver")
    find = MockFinder()
    interact = Interactor(mock_driver, find, None, None, MagicMock(name="log"))
    page_element = PageElement(By.ID, "test-id")

    interact.scroll_into_view(page_element)

    mock_driver.execute_script.assert_called_once_with(
        "arguments[0].scrollIntoView();", find.mock_element)
Example #14
0
def test_enter_text_clears_first():
    find = MockFinder()
    interact = Interactor(None, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")
    find.mock_element.text = "1234"

    interact.enter_text(page_element, "abcd", True)

    assert_that(find.mock_element.text, equal_to("abcd"),
                "Text not cleared before sending")
Example #15
0
def test_click_element():
    find = MockFinder()
    interact = Interactor(None, find, None, None, None)
    page_element = PageElement(By.ID, "test-id")

    interact.click_element(page_element)

    assert_that(len(find.mock_element.clicked_elements), equal_to(1),
                "The element should have been clicked once")
    assert_that(find.mock_element.clicked_elements[0], equal_to(page_element),
                "Incorrect element clicked")
def test_is_element_visible():
    mock_driver = MagicMock()
    elements = [MockElement("true")]
    finder = MockFinder(list_of_elements_to_return=elements)
    wait_time = 10
    test_interrogator = Interrogator(mock_driver, finder, wait_time, "logger")

    test_interrogator.is_element_visible(PageElement(By.ID, "some_id"))
    assert_that(mock_driver.implicitly_wait.call_count, equal_to(2),
                "Expected two calls to implicitly_wait")
    assert_that(elements[0].is_displayed_called, is_(1),
                "is_displayed was not called the expected amount of times")
def test_elements_logs_out_info():
    driver = MockDriver()
    logger = MagicMock()
    find = Finder(driver, logger)

    find.elements(PageElement(By.ID, "test-id"))

    assert_that(logger.info.call_count, equal_to(2),
                "Two messages should have been logged")
    logger.info.assert_any_call(
        "Looking for elements matching PageElement id='test-id'")
    logger.info.assert_any_call("Found 1 element(s)")
Example #18
0
def test_switch_to_frame():
    mock_driver = MagicMock(name="driver")
    finder = Finder(mock_driver, MagicMock(name="logger"))
    interrogator = Interrogator(mock_driver, finder, "logger")
    waiter = Waiter(mock_driver, finder, "logger")
    test_interactor = Interactor(mock_driver, finder, interrogator, waiter,
                                 "logger")
    frame_to_find = PageElement(By.ID, "frame_id")

    test_interactor.switch_to_frame(frame_to_find)

    mock_driver.switch_to.frame.assert_called_once_with(
        finder.element(frame_to_find))
def test_visible_elements_returns_correct_elements():
    elements_to_return = [
        MockElement("", True, "false"),
        MockElement("", False, "false"),
        MockElement("", True, "true"),
        MockElement("", False, "true")
    ]

    driver = MockDriver(elements_to_return)
    find = Finder(driver, None)

    visible_elements = find.visible_elements(
        PageElement(By.CLASS_NAME, "test-class"))

    assert_that(len(visible_elements), equal_to(1),
                "Incorrect number of elements returned")
from unittest import mock
from unittest.mock import MagicMock
import requests
from hamcrest import assert_that, equal_to, contains, is_
from selenium.webdriver.common.by import By
from tests.unit.unit_test_utils import check_mocked_functions_called
from uitestcore.finder import Finder
from uitestcore.interrogator import Interrogator
from uitestcore.page_element import PageElement

default_page_element = PageElement(By.ID, "test-id")


class MockDriver(object):
    @staticmethod
    def get_cookies():
        mock_cookies = [{
            "name": "nhsuk-cookie-consent",
            "value": "%7B%22preferences%22%3Atrue%7D"
        }, {
            "name": "s_getNewRepeat",
            "value": "1564127000350-Repeat"
        }]
        return mock_cookies


class MockFinder(object):
    def __init__(self, list_of_elements_to_return=None):
        self.list_of_elements_to_return = list_of_elements_to_return

    def elements(self, _page_element):