如何 return Protractor 中的警报文本?
How do I return the text of an alert in Protractor?
我有一个填写创建客户页面的测试。单击保存后,会弹出一个警报,其中包含新生成的客户 guid。我正在尝试制作一个点击保存的功能,捕捉警报文本,然后 return 将其发送到我的量角器测试以供稍后使用。
我不明白这些承诺的工作方式,希望得到一些帮助!
目前,我使用此功能点击保存按钮,然后检查警报包含一条消息:
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();
});
};
有了这个功能,它会等到警报打开,然后检查消息。我想稍微改变一下,这样它就不会检查消息,而是 return 用于我的 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');
不幸的是,这个函数return是一个未定义的变量。如果我稍微改变一下:
...
var popupAlert = browser.switchTo().alert();
var result = popupAlert.getText();
expect(result).toMatch('Test');
return result;
...
expect 能够看到函数内部生成的 guid。即使在 expect 之后直接使用 return,它仍然 returns '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
您正在寻找的是在 then
函数中获取警报。
var myAlertText;
browser.switchTo().alert()
.then(function (alert) {
if (alert) {
alert.getText(function(alertText){
expect(alertText).toContain('Test');
myAlertText = alertText;
});
return alert.dismiss();
}
});
这是我最终得到的解决方案:
addContact_spec.js
var addContactFunctions = require('./../../pages/addContact/addContact_functions.js');
describe('From an alert, ', function(){
it('the alert text can be saved', function(){
var addContactFuncts = new addContactFunctions();
// Save and get the customer guid
var custGuid;
custGuid = addContactFuncts.saveAndReturnGuid();
expect(custGuid).toContain('randomguid'); <---- This will fail, but have the real guid inside
});
});
addContact_functions.js
var addContactPage = require('./../../pages/addContact/addContact_page.js');
module.exports = function(){
this.saveAndReturnGuid = saveAndReturnGuid;
function saveAndReturnGuid() {
var addContact = new addContactPage();
return addContact.saveButton.click().then(function (alertText) {
browser.wait(function () {
return browser.switchTo().alert().then(
function () {return true;},
function () {return false;}
);
}, 3000);
var popupAlert = browser.switchTo().alert();
alertText = popupAlert.getText();
popupAlert.dismiss();
return alertText;
});
};
}
我需要 browser.wait 和 return browser.switchTo.alert 来等待警报弹出。由于我的知识有限,找到正确的 space 来放置 alertText 只是反复试验。
我有一个填写创建客户页面的测试。单击保存后,会弹出一个警报,其中包含新生成的客户 guid。我正在尝试制作一个点击保存的功能,捕捉警报文本,然后 return 将其发送到我的量角器测试以供稍后使用。
我不明白这些承诺的工作方式,希望得到一些帮助!
目前,我使用此功能点击保存按钮,然后检查警报包含一条消息:
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();
});
};
有了这个功能,它会等到警报打开,然后检查消息。我想稍微改变一下,这样它就不会检查消息,而是 return 用于我的 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');
不幸的是,这个函数return是一个未定义的变量。如果我稍微改变一下:
...
var popupAlert = browser.switchTo().alert();
var result = popupAlert.getText();
expect(result).toMatch('Test');
return result;
...
expect 能够看到函数内部生成的 guid。即使在 expect 之后直接使用 return,它仍然 returns '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
您正在寻找的是在 then
函数中获取警报。
var myAlertText;
browser.switchTo().alert()
.then(function (alert) {
if (alert) {
alert.getText(function(alertText){
expect(alertText).toContain('Test');
myAlertText = alertText;
});
return alert.dismiss();
}
});
这是我最终得到的解决方案:
addContact_spec.js
var addContactFunctions = require('./../../pages/addContact/addContact_functions.js');
describe('From an alert, ', function(){
it('the alert text can be saved', function(){
var addContactFuncts = new addContactFunctions();
// Save and get the customer guid
var custGuid;
custGuid = addContactFuncts.saveAndReturnGuid();
expect(custGuid).toContain('randomguid'); <---- This will fail, but have the real guid inside
});
});
addContact_functions.js
var addContactPage = require('./../../pages/addContact/addContact_page.js');
module.exports = function(){
this.saveAndReturnGuid = saveAndReturnGuid;
function saveAndReturnGuid() {
var addContact = new addContactPage();
return addContact.saveButton.click().then(function (alertText) {
browser.wait(function () {
return browser.switchTo().alert().then(
function () {return true;},
function () {return false;}
);
}, 3000);
var popupAlert = browser.switchTo().alert();
alertText = popupAlert.getText();
popupAlert.dismiss();
return alertText;
});
};
}
我需要 browser.wait 和 return browser.switchTo.alert 来等待警报弹出。由于我的知识有限,找到正确的 space 来放置 alertText 只是反复试验。