2016-04-25 4 views
2

Ich habe den folgenden benutzerdefinierten Befehl in Javascript für nightwatch.js geschrieben. Wie kann ich das mit jquery übersetzen?Wie schreibe ich einen Nightwatch benutzerdefinierte Befehl mit jquery

exports.command = function (classId, indexIfNotZero) { 
    this.browser.execute(function (classId, indexIfNotZero) { 
     if (classId.charAt(0) == '.') { 
      classId = classId.substring(1); 
     } 
     var items = document.getElementsByClassName(classId); 

     if (items.length) { 
      var item = indexIfNotZero ? items[indexIfNotZero] : items[0]; 

      if (item) { 
       item.click(); 
       return true; 
      } 
     } 
     return false; 

     //alert(rxp); 
    }, [classId, indexIfNotZero], function (result) { 
     console.info(result); 
    }); 
}; 

Antwort

1

Es gibt ein paar Dinge, die ich sehe, die Ihre Probleme verursachen.

Zuerst haben Sie variable shadowing, die Probleme verursachen können. Ihr globaler Exportbefehl hat 2 Variablen (classId und indexIfNotZero) und Ihr interner Ausführungsbefehl hat dieselben Parameternamen.

Zweitens, für benutzerdefinierte Befehle ist die this Variable tatsächlich die browser. Anstatt also this.browser.execute zu tun, müssen Sie einfach this.execute anrufen.

Wie für ein vollständiges Arbeitscodebeispiel, hier gehen Sie:

'use strict'; 

var ClickElementByIndex = function(className, index) { 
    if (!index) { 
    index = 0; 
    } 

    this.execute(function(selector, i) { 
    var $item = $(selector + ':eq(' + i + ')'); 
    if (!!$item) { 
     $item.click(); 
     return true; 
    } 
    return false; 
    }, [className, index], function(result) { 
    console.info(result); 
    }); 
}; 

exports.command = ClickElementByIndex; 

Beachten Sie, dass jQuery für diese im globalen Bereich Ihrer App verfügbar tun müssen, um zu arbeiten.

+0

Ich bin ein bisschen aß, um das zu beantworten, aber die '! Index'-Bedingung wird auf' wahr 'zurückgesetzt, wenn auch der Index gleich 0 ist. Es ist hier kein Problem, aber der Klarheit halber ist if (index == undefined) 'besser. – koehr