Jasmine 'expect' 如何等待量角器承诺解决
how does Jasmine 'expect' waits for a protractor promise to resolve
我正在进行端到端测试。
在单击按钮之前,我有一个页面上不存在的确认弹出窗口。
创建确认弹出窗口后,我从那里的元素中获取文本。
之后,我单击“确定”按钮,这会导致从 DOM 中删除确认弹出窗口,并向 DOM 添加一个新元素,其值为我之前获得的文本。
问题是,因为 getText() returns 一个承诺,当我进行比较时,第一个元素不在屏幕上并且测试失败。
如果我确实希望屏幕上出现确认弹出窗口时,我可以看到确认弹出窗口元素的文本。
Jasmine expect() 如何解析 promise?
提前致谢
是这样的吗?
element(by.id('dangerous-activity')).click().then(function () {
element(by.id('confirmation-text')).getText().then(function (textToConfirm) {
element(by.id('confirm-button')).click().then(function () {
element(by.id('new-element')).getText().then(function (newText)) {
expect(newText).toBe(textToConfirm);
});
});
});
});
这里所有的 promise 都被显式 resolve,所以 Jasmine 不需要再 resolve 任何 promise。
您可以让 expect
解决 new-element
承诺,将最后两行替换为:
....
expect(element(by.id('new-element')).getText()).toBe(textToConfirm);
....
但是您无法以同样的期望获得 textToConfirm
,因为它已经按照您的指示消失了。
这应该是做你想做的最简单的方法:
$('#open-popup').click();
var textToConfirm = $('#popup-text').getText();
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirm);
注意这不起作用:
$('#open-popup').click();
var textToConfirmElement = $('#popup-text');
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirmElement.getText());
因为这里是在弹出窗口关闭后得到的文本。
我正在进行端到端测试。 在单击按钮之前,我有一个页面上不存在的确认弹出窗口。 创建确认弹出窗口后,我从那里的元素中获取文本。
之后,我单击“确定”按钮,这会导致从 DOM 中删除确认弹出窗口,并向 DOM 添加一个新元素,其值为我之前获得的文本。
问题是,因为 getText() returns 一个承诺,当我进行比较时,第一个元素不在屏幕上并且测试失败。
如果我确实希望屏幕上出现确认弹出窗口时,我可以看到确认弹出窗口元素的文本。
Jasmine expect() 如何解析 promise?
提前致谢
是这样的吗?
element(by.id('dangerous-activity')).click().then(function () {
element(by.id('confirmation-text')).getText().then(function (textToConfirm) {
element(by.id('confirm-button')).click().then(function () {
element(by.id('new-element')).getText().then(function (newText)) {
expect(newText).toBe(textToConfirm);
});
});
});
});
这里所有的 promise 都被显式 resolve,所以 Jasmine 不需要再 resolve 任何 promise。
您可以让 expect
解决 new-element
承诺,将最后两行替换为:
....
expect(element(by.id('new-element')).getText()).toBe(textToConfirm);
....
但是您无法以同样的期望获得 textToConfirm
,因为它已经按照您的指示消失了。
这应该是做你想做的最简单的方法:
$('#open-popup').click();
var textToConfirm = $('#popup-text').getText();
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirm);
注意这不起作用:
$('#open-popup').click();
var textToConfirmElement = $('#popup-text');
$('#confirm-button').click();
var newText = $('#new-element').getText();
expect(newText).toBe(textToConfirmElement.getText());
因为这里是在弹出窗口关闭后得到的文本。