Des*_*aiM 22 selenium angularjs protractor
我正在编写一个测试用例,用于在使用Protractor的Angular应用程序的页面中添加商店信息,最初我在计算我已经拥有的商店数量,在测试块完成后,我希望计数增加1,因此我通过以下链接创建promises 如何在Protractor中创建和操作promises?
describe('myApp', function() {
var items,startCount;
var testPromise = function(){
items = element.all(by.repeater('store in storelist'));
var deferred = protractor.promise.defer();
items.count().then(function(orgCount){
startCount = orgCount;
console.log('Start Count: '+ startCount); //prints correct value e.g, 6
}, function(error){
console.log(error);
});
return deferred.promise;
};
it('should accept valid data for adding new store', function() {
var cNum = null;
testPromise().then(function(result){
cNum = result;
console.log('cNUm value: '+ cNum); //this value doesn't get printed in console
});
/* Code for adding test fields in store page */
expect(items.count()).toBe(cNum+1);
});
});
Run Code Online (Sandbox Code Playgroud)
我希望在测试结束时商店数量相同.count()正在解析一个promise并且正确的存储计数值会在testPromise()中打印出来但在我调用testPromise()的时候会阻塞它.那么它的方法永远不会进入'then'块
最后的结果说
Message:
Expected 6 to be 1.
Stacktrace:
Error: Failed expectation
Run Code Online (Sandbox Code Playgroud)
我还通过此链接http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_promise_Promise.html在webdriver.promise.Promise()中进行了更多研究,并尝试使用它来创建承诺并解决其价值但不确定问题是什么.我得到的错误信息是"预期6为NaN"或"预期6为1"我是否正在解决承诺或正确写'然后'阻止?希望得到关于这个问题的一些见解/帮助.
gon*_*ard 48
为了在量角器中创建一个承诺,你必须写:
var deferred = protractor.promise.defer();
var promise = deferred.promise;
Run Code Online (Sandbox Code Playgroud)
回调是异步调用的.您可以注册一个(或多个)"成功"回调:
promise.then(function() {
...
});
Run Code Online (Sandbox Code Playgroud)
你也可以注册一个(或多个)"on error"回调:
promise.then(null, function() {
...
});
Run Code Online (Sandbox Code Playgroud)
这些注册可以链接:
promise.then(function() {
...
}).then(function() {
...
}).then(null, function() {
...
}).then(function() {
}, function() {
...
}).then(onSuccess, onFailure);
Run Code Online (Sandbox Code Playgroud)
成功解析promise后,将调用"on success"回调:
deferred.fulfill(value);
Run Code Online (Sandbox Code Playgroud)
成功解析promise后,将调用"on failure"回调:
deferred.reject(new Error('a problem occurs'));
Run Code Online (Sandbox Code Playgroud)
你错过了决议步骤.你必须兑现承诺.
Webdriver.js文档中提供了更完整的参考
t.8*_*888 12
以下是在Protractor中使用的用户定义函数的工作示例,该函数创建并实现(或拒绝)承诺:
// Get the text of an element and convert to an integer.
// Returns a promise.
function getTextAsInteger(element, radix) {
// Specify a default radix for the call to parseInt.
radix = radix || 10;
// Create a promise to be fulfilled or rejected later.
var deferred = protractor.promise.defer();
// Get the text from the element. The call to getText
// returns a promise.
element.getText().then(
function success(text) {
var num = parseInt(text, radix);
if (!isNaN(num)) {
// Successfully converted text to integer.
deferred.fulfill(num);
} else {
// Error converting text to integer.
deferred.reject('could not parse "$1" into an integer'
.replace('$1', text));
}
},
function error(reason) {
// Reject our promise and pass the reason from the getText rejection.
deferred.reject(reason);
});
// Return the promise. This will be resolved or rejected
// when the above call to getText is resolved.
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
该函数element
作为参数并调用其getText()
自身返回promise的方法.在成功调用时getText()
,将文本解析为整数并履行承诺.如果getText()
拒绝,我们将原因传递给我们自己的拒绝电话.
要使用此函数,请传入元素承诺:
var numField = element(by.id('num-field'));
getTextAsInteger(numField).then(
function success(num) {
console.log(num);
},
function error(reason) {
console.error(reason);
});
Run Code Online (Sandbox Code Playgroud)
要么:
var numField = element(by.id('num-field'));
expect(getTextAsInteger(numField)).toEqual(jasmine.any(Number));
expect(getTextAsInteger(numField)).toBeGreaterThan(0);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35528 次 |
最近记录: |