def test_arrow_navigation_execute_should_call_js_loader_exec_js(self):
        context_mock = Mock()

        with patch.object(JsCodeLoader, 'exec_js') as exec_js_mock:
            exec_js_mock.return_value = 'some_element'
            arrow_action = ArrowNavigationAction()
            arrow_action.execute(context_mock, 'element', 'some element', False)

        exec_js_mock.assert_called_once_with(context_mock, 'arrow_navigation.js', 'some element', '30')
    def test_execute_should_include_key_press_attribute_if_passed(self):
        context_mock = Mock()

        with patch.object(JsCodeLoader, 'exec_js') as exec_js_mock:
            exec_js_mock.return_value = 'some_element'
            arrow_action = ArrowNavigationAction()
            arrow_action.execute(context_mock, 'element', 'some element', '20')

        exec_js_mock.assert_called_once_with(context_mock, 'arrow_navigation.js', 'some element', '20')
    def test_execute_should_throw_action_failed_error_on_not_found_response(self):
        context_mock = Mock()

        with patch.object(JsCodeLoader, 'exec_js') as exec_js_mock:
            exec_js_mock.return_value = 'Not found...'
            arrow_action = ArrowNavigationAction()
            try:
                arrow_action.execute(context_mock, 'element', 'some element', '20')
                self.assertTrue(False)
            except ActionFailedError:
                self.assertTrue(True)

        exec_js_mock.assert_called_once_with(context_mock, 'arrow_navigation.js', 'some element', '20')
    def test_execute_should_throw_action_failed_error_on_max_key_presses_reached(self):
        context_mock = Mock()

        with patch.object(JsCodeLoader, 'exec_js') as exec_js_mock:
            exec_js_mock.return_value = 'Max number of key presses reached...'
            arrow_action = ArrowNavigationAction()
            try:
                arrow_action.execute(context_mock, 'element', 'some element', '20')
                self.assertTrue(False)
            except ActionFailedError:
                self.assertTrue(True)

        exec_js_mock.assert_called_once_with(context_mock, 'arrow_navigation.js', 'some element', '20')