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调用这个函数,我们需要将它保存在配置内部调用