Jasmine的条件期望?

时间:2015-07-10 20:28:13

标签: javascript jasmine protractor

我正在测试一个可以发生随机叠加的页面。

这些HTML / CSS元素会阻止整个屏幕,并强制您在显示时关闭它们。

如何编写Jasmine测试it("...."),以便我可以有条件地

  • 在初始屏幕加载时检查此弹出窗口..
  • 使用click()
  • 关闭弹出窗口
  • 检查确实弹出窗口已关闭

不使用expect,因为此弹出窗口并不总是存在,并且测试用例会/可能会失败。

这是我目前所拥有的,如果对话框覆盖不存在则会失败..

Jasmine Testcase说明

 describe("close header warning if opened", function () {
    it("should check for header warning", function () {
        writeTitleToLog("close header warning if opened");
        element(by.css('.header-warning-container')).isDisplayed().then(function (displayed) {
            if(displayed) {
                element(by.css('.close-container')).click();
            }
        });
    });

    it("should not have the header warning", function () {
        expect(element(by.css('.header-warning-container')).isPresent()).toBeFalsy();
    });
});

测试输出

landing page
    should check for header warning, and close it - fail
    should not have the header warning, once it is closed - pass

2 个答案:

答案 0 :(得分:1)

看看这是否适合你。

正如您所做的那样,使用isDisplayed进行检查。然后,如果元素在那里。点击关闭。等待它关闭。然后在if块之后做你的期望,以确保它关闭。如果警告不存在,这不应该失败,因为它会跳过期望。

    overlays.headerWarning.isDisplayed().then(function(result){
        if(result){
            overlays.headerWarningCloseButton.click();
            browser.wait(protractor.until.elementIsNotVisible(overlays.headerWarningCloseButton), 3000, 'Header warning overlay did not close');
            expect(overlays.headerWarning.isDisplayed()).toBeFalsy('Header was displayed after attempted close');
        } else {
            //do nothing
        }
    });

答案 1 :(得分:1)

结果......如果元素不存在,我就不能使用isDisplayed() ..它会抛出错误。这是现在正确传递的解决方案

describe("close header warning if opened", function () {

    it("should check for header warning", function () {
        writeTitleToLog("close header warning if opened");
        var headerElm = by.css('.header-warning-container');
        element(headerElm).isPresent().then(function (isPresent) {
            if(isPresent) {
                element(by.css('.close-container')).click();
            }
        });
    });

    it("should not have the header warning", function () {
        expect(element(by.css('.header-warning-container')).isPresent()).toBeFalsy();
    });
});