Javascript 《茉莉花》中的条件期望?

Javascript 《茉莉花》中的条件期望?,javascript,jasmine,protractor,Javascript,Jasmine,Protractor,我正在测试一个可能出现随机覆盖的页面 这些HTML/CSS元素会阻塞整个屏幕,并在显示时强制关闭它们 如何编写Jasmine测试it(“…”),以便有条件地 在初始屏幕加载时检查此弹出窗口 用单击()关闭弹出窗口 检查弹出窗口是否确实关闭 不使用expect,因为此弹出窗口并不总是存在,并且测试用例可能会失败 这是我目前拥有的,如果对话框覆盖不存在,它就会失败 Jasmine测试用例描述 describe("close header warning if opened", function

我正在测试一个可能出现随机覆盖的页面

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

如何编写Jasmine测试
it(“…”)
,以便有条件地

  • 在初始屏幕加载时检查此弹出窗口
  • 单击()关闭弹出窗口
  • 检查弹出窗口是否确实关闭
不使用
expect
,因为此弹出窗口并不总是存在,并且测试用例可能会失败

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

Jasmine测试用例描述

 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

看看这是否适合你

在进行操作时,请使用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
        }
    });

结果。。如果元素不存在,我就不能使用
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();
    });
});

“弹出窗口”是什么意思<代码>警报()
?请分享一些代码,而不是javascript警报。。但是CSS/HTMLOverlyCSS/HTMLOverlay不会阻止JS的执行,所以Jasmine在运行代码时应该没有问题。你到底遇到了什么问题?你试过什么吗?看看我的更新。。当前测试失败,但没有给我错误消息(如未找到元素)。。它失败了。哪一个
失败了?
结果是,我需要使用
isPresent()
而不是
isDisplayed()
我也很喜欢你的例子,尽管它可能会减慢测试速度
isPresent()
不错,看起来不错!即使元素不在那里,我也可以让isDisplay作为检查来工作,但我是从一个页面对象调用它的,它对元素是否在那里的“验证”排序较少。也许这就是区别?