我正在进行e2e测试。 我有一个确认弹出窗口在页面上不存在,直到我点击一个按钮。 创建确认弹出窗口后,我从那里的元素中获取文本。
之后我单击OK按钮,这会导致确认弹出窗口从DOM中删除,并且还会向DOM添加一个新元素,其值为我之前的文本。
问题是,因为getText()返回一个promise,当我进行比较时,屏幕上没有第一个元素,测试失败。
如果我确实期望屏幕上的确认弹出窗口,我可以看到确认弹出元素的文本。
Jasmine expect()如何解决这个承诺?
提前致谢
答案 0 :(得分:6)
这样的东西?
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);
});
});
});
});
此处所有承诺都已明确解决,因此Jasmine不再需要解决任何承诺。
您可以expect
解析new-element
承诺,将最后两行替换为:
....
expect(element(by.id('new-element')).getText()).toBe(textToConfirm);
....
但是你无法得到textToConfirm
同样的期望,因为它已经过了你所说的。
答案 1 :(得分:3)
这应该是做你想做的最简单的方法:
$('#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());
因为在弹出窗口关闭后你会得到文本。