Функция вызова, определенная внутри контроллера Angularjs с использованием веб-драйвера Selenium - PullRequest
0 голосов
/ 26 августа 2018

В настоящее время мы используем селен для нашей автоматизации.У меня есть угловой код js, определенный как ниже.

var app = angular.module('myApp', ['ngCookies']);
myController.$inject = ['$scope', '$cookies', '$http', '$timeout', '$window'];

function myController($scope, $cookies, $http, $timeout, $window) {
   var vm = this;
   vm.handleResponse = handleResponse;
    //More code 
    ....
   function handleResponse(Response) {
    .......
  }
}

Я хочу вызвать функцию handleResponse из моего сценария selenium.Я использовал JavascriptExecutor как показано ниже для не AngularJS кода.Но похоже, что это не работает с angular

JavascriptExecutor jse =  (JavascriptExecutor) driver;
jse.executeScript("var response = JSON.parse(JSON.stringify(" + sign + "));" +
        "window.handleResponse(response);");

Как это можно сделать с Selenium?

1 Ответ

0 голосов
/ 26 августа 2018

Почему вы хотите выполнить функцию вашего приложения?при тестировании с селеном обычно тесты пишутся как «черный ящик», вы не знаете, какую клиентскую среду вы используете.

Если вы действительно хотите это сделать, вы можете проверить, что делает транспортир, когда вывызов addMockModule, основная идея такова:

  1. Пометить на угловой, чтобы не выполнять автозагрузку (даже если вы используете директиву ng-app).
  2. Добавьте макет модуля в качестве зависимости вашего модуля приложения.
  3. Ручная загрузка модуля приложения вручную.

Проверьте, что код .

Другой подход заключается в загрузке angular с отладочной информацией (это можно сделать с помощью вызова angular.reloadWithDebugInfo()).Затем захватите корневой элемент и получите ссылку на ваше приложение injector.

const injector = angular.element(document.getElementById('root')).injector()
const $controller = injector.get('$controller');
const ctrlName = $controller('ctrlName', locals = {});
ctrlName.youFunc();

Ссылки:

  1. $ инжектор
  2. $ контроллер
...