【发布时间】:2015-05-19 15:51:57
【问题描述】:
我有一个填写创建客户页面的测试。单击保存后,会弹出一条警报,其中包含新生成的客户 guid。我正在尝试制作一个单击保存,捕获警报文本,然后将其返回到我的量角器测试以供以后使用的功能。
我不了解这些承诺的工作方式,希望能得到一些帮助!
目前,我使用此功能单击保存按钮,然后检查警报以包含消息:
function saveContactAndCheckMessage(saveMessage){
var addContact = new addContactPage;
addContact.saveButton.click().then(function(){
browser.wait(function(){
return browser.switchTo().alert().then(
function(){return true;},
function(){return false;}
);
},3000);
var popupAlert = browser.switchTo().alert();
expect(popupAlert.getText()).toContain(saveMessage);
popupAlert.dismiss();
});
};
使用此功能,它会等到警报打开,然后检查消息。我想对其进行一些更改,使其不检查消息,而是返回消息以供我的 Protractor 测试存储和以后使用。
function saveContactAndReturnGuid(){
var addContact = new addContactPage;
addContact.saveButton.click().then(function(){
browser.wait(function(){
return browser.switchTo().alert().then(
function(){return true;},
function(){return false;}
);
},3000);
var popupAlert = browser.switchTo().alert();
var result = popupAlert.getText();
popupAlert.dismiss();
return result;
});
};
然后是调用它的代码:
var customerGuid = addContactFunctions.saveContactAndReturnGuid();
expect(customerGuid).toMatch('Example to check what the real guid value is');
不幸的是,这个函数返回一个未定义的变量。如果我稍微改变一下:
...
var popupAlert = browser.switchTo().alert();
var result = popupAlert.getText();
expect(result).toMatch('Test');
return result;
...
expect 能够很好地看到函数内部生成的 guid。即使在 expect 之后直接返回,它仍然返回 'undefined'。
我知道这是因为它是异步的,但我不确定要查找什么来解决这个问题。有什么想法可以用这个去哪里吗?
编辑:在函数外部仍将数据显示为未定义的替代方法。
var customerGuid;
addContact.saveButton.click().then(function(){
browser.wait(function(){
return browser.switchTo().alert().then(
function(alert){
expect(alert.getText()).toContain('test'); <---- This shows the alert message correctly
customerGuid = alert.getText(); <---- This shows up as undefined later
alert.dismiss();
return true;
},
function(){
return false;
});
},3000);
});
expect(customerGuid).toMatch('test'); <---- Fails, undefined
【问题讨论】:
-
澄清一下,我可以在函数中访问警报中的文本。我只是无法返回并将该文本保存在我的主程序中。
标签: angularjs webdriver protractor