是否可以从 Angular e2e 场景执行 jQuery 命令?
例如,如果我想执行:$('.picker-col-id-id').attr('class');
我收到一个错误:
TypeError:对象 [object Object] 的属性“$”不是函数
这里的问题是 AngularJs Scenario Test Runner 在 iframe 中运行您的应用程序。跑步者本身没有加载 jQuery。
最好使用角度场景 dsl。来自e2e 测试文档:
元素(选择器,标签)。{方法}(键,值)
在匹配给定 jQuery 选择器的元素上执行传入键和值的方法,其中方法可以是以下任何 jQuery 方法:attr、prop、css。标签用于测试输出。
虽然从文档中不清楚,但您也可以使用只有 1 个参数的 'attr' 方法来获取属性的值。
element('.picker-col-id-id').attr('class');
如果你需要其他 jQuery 功能,比如 focus(),你可以这样做:
element('.picker-col-id-id').query(function(elements, done) {
elements.focus();
done();
});
或扩展角度 dsl
angular.scenario.dsl('jQueryFunction', function() {
return function(selector, functionName /*, args */) {
var args = Array.prototype.slice.call(arguments, 2);
return this.addFutureAction(functionName, function($window, $document, done) {
var $ = $window.$; // jQuery inside the iframe
var elem = $(selector);
if (!elem.length) {
return done('Selector ' + selector + ' did not match any elements.');
}
done(null, elem[functionName].apply(elem, args));
});
};
});
并以这种方式使用它:
jQueryFunction('.picker-col-id-id', 'focus');
或者一般来说:
jQueryFunction(selector, jQueryFunctionName, arg1, arg2, ...);
正如评论中提到的,它看起来缺少 jQuery。您需要将它添加到您的 karma 配置文件或直接添加到 runner.html。
如果您想将其添加到您的业力配置文件中,请增加files
条目以添加对 jQuery 的引用,例如,
files = [
ANGULAR_SCENARIO,
ANGULAR_SCENARIO_ADAPTER,
'app/components/jquery/jquery.js', // <== This should point to jQuery
'test/e2e/**/*.js'
];
或者,如果您正在运行您的 e2e 测试,runner.html
您可以在 angular 之后和脚本之前加载它,例如:
<!doctype html>
<html lang="en">
<head>
<title>End2end Test Runner</title>
<script src="../lib/angular/angular-scenario.js" ng-autotest></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="scenarios.js"></script>
</head>
<body>
</body>
</html>