Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Protractor 如何向量角器全局添加自定义定位器?_Protractor - Fatal编程技术网

Protractor 如何向量角器全局添加自定义定位器?

Protractor 如何向量角器全局添加自定义定位器?,protractor,Protractor,我为量角器编写了一个自定义定位器,它通过ui-sref值查找anchor元素。在我的规范中,我只是使用.addLocator使用了by.addLocator来添加自定义定位器,但我认为这可能是一件很酷的事情,可以发布并让其他人使用它 目标是将此自定义定位器添加到全局量角器对象,以便可以在任何规格中使用 我最初的方法是在量角器配置的onPrepare块中添加此功能。类似下面的伪代码: onPrepare:function(){ require('ui-sref-locator')(量角器);//量

我为量角器编写了一个自定义定位器,它通过
ui-sref
值查找
anchor
元素。在我的规范中,我只是使用.addLocator使用了
by.addLocator
来添加自定义定位器,但我认为这可能是一件很酷的事情,可以发布并让其他人使用它

目标是将此自定义定位器添加到全局量角器对象,以便可以在任何规格中使用

我最初的方法是在量角器配置的
onPrepare
块中添加此功能。类似下面的伪代码:

onPrepare:function(){ require('ui-sref-locator')(量角器);//量角器对象在此处可用。 } require语句将只执行此函数:

函数(ptorInstance){
ptorInstance.by.addLocator('uiSref',函数(toState,opt_parentElement){
var using=opt_parentElement | document;
var possibleAnchors=using.querySelectorAll('a[ui sref=“”+toState+”);
var结果=未定义;
如果(可能的长度==0){
结果=空;
}else if(可能的chors.length==1){
结果=可能的氯[0];
}否则{
结果=可能的氯;
}
返回结果;
});
};
问题在于,
onPrepare
块中可用的
量角器
对象上未定义
by
。这意味着我无法使用
.addLocator
方法。

请尝试以下操作:

function () {
  by.addLocator('uiSref', function (toState, opt_parentElement) {
  ...

By应该在全局范围内。

传递到
onPrepare
块的
量角器
对象具有
By
属性。
By
属性具有名为
addLocator
的继承可枚举属性。我对JavaScript的理解非常肤浅,所以当我
console.log
调用
量角器时,它会返回
{}
,但是如果我对(
量角器中的var propName.By)
执行
操作,它会显示所有“隐藏”属性。我仍在努力理解这一点

工作代码:

onPrepare: function () {
  require('ui-sref-locator')(protractor); // The protractor object is available here.
}
require将执行以下功能:

function (ptor) {
  ptor.By.addLocator('linkUiSref', 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;
  });
};

不。量角器已初始化。我所寻找的函数是一个不可枚举的属性(我相信),这就是为什么我第一眼看不到它的原因。我仍然了解我的工作方案的一些细节,但当我完成后,我会写一个正确的答案。你是对的。我刚刚检查了我编写的一些旧代码,这些代码在onPrepare()中添加了一个定位器。检查更新的代码。我们如何从sepratejs调用这个函数,我们需要将它保存在配置内部调用