Wie füge ich einen benutzerdefinierten Locator global zu Protractor hinzu?

Ich habe einen benutzerdefinierten Locator für Winkelmesser geschrieben, der findetanchor Elemente durch ihreui-sref Wert. In meinen Angaben habe ich gerade verwendetby.addLocator um den benutzerdefinierten Locator hinzuzufügen, aber ich dachte, dass dies eine coole Sache sein könnte, um sie zu veröffentlichen und andere Leute dazu zu bringen, sie zu verwenden.

Ziel ist es, diesen benutzerdefinierten Locator zum globalen Winkelmesser-Objekt hinzuzufügen, damit er in allen Ihren Spezifikationen verwendet werden kann.

Mein anfänglicher Ansatz war es, diese Funktionalität in dieonPrepare Block der Winkelmesser-Konfiguration. So etwas wie der Pseudocode unten:

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

Diese require-Anweisung würde nur diese Funktion ausführen:

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;
  });
};

Das Problem ist, dassby ist auf dem nicht definiertprotractor Objekt verfügbar in deronPrepare Block. Dies bedeutet, dass ich das nicht verwenden kann.addLocator Methode.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage