如何使用jquery编写nightwatch自定义命令

时间:2016-04-25 00:08:51

标签: javascript jquery nightwatch.js

我在javascript中为nightwatch.js编写了以下自定义命令。我怎样才能将其转换为使用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);
    });
};

1 个答案:

答案 0 :(得分:1)

我发现有一些事情会导致您的问题。

首先,您有variable shadowing可能会导致问题。您的全局导出命令有2个变量(classIdindexIfNotZero),您的内部执行命令具有相同的参数名称。

其次,对于自定义命令,this变量实际上是browser。因此,您只需拨打this.browser.execute

,而不是this.execute

至于完整的工作代码示例,请转到:

'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;

请注意,您确实需要在应用的全局范围内使用jQuery才能实现此目的。