¿Cómo agregar globalmente un localizador personalizado a Protractor?

Escribí un localizador personalizado para el transportador que encuentraanchor elementos por suui-sref valor. En mis especificaciones acabo de usarby.addLocator agregar el localizador personalizado, pero pensé que esto podría ser algo genial para publicar y que otras personas lo usen.

El objetivo es agregar este localizador personalizado al objeto Protractor global para que pueda usarse en cualquiera de sus especificaciones.

Mi enfoque inicial fue agregar esta funcionalidad en elonPrepare bloque de la configuración del transportador. Algo así como el pseudocódigo a continuación:

onPrepare: function () {
  require('ui-sref-locator')(protractor); // The protractor object is available here.
}

Esa declaración require solo ejecutaría esta función:

function (ptorInstance) {
  ptorInstance.by.addLocator('uiSref', function (toState, opt_parentElement) {
    var using = opt_parentElement || document;
    var possibleAnchors = using.querySelectorAll('a[ui-sref="' + toState +'"]');
    var result = undefined;

    if (possibleAnchors.length === 0) {
      result = null;
    } else if (possibleAnchors.length === 1) {
      result = possibleAnchors[0];
    } else {
      result = possibleAnchors;
    }

    return result;
  });
};

El problema es eseby no está definido en elprotractor objeto disponible en elonPrepare bloquear. Esto significa que no puedo usar el.addLocator método.

Respuestas a la pregunta(2)

Su respuesta a la pregunta