【问题标题】:conditional expectations in Jasmine?茉莉花的条件期望?
【发布时间】:2015-07-11 07:03:24
【问题描述】:

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

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

如何写一个 Jasmine 测试 it("....") ,这样我可以有条件地

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

不使用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

【问题讨论】:

  • “弹出窗口”是什么意思? alert()?请分享一些代码。
  • 不是 javascript 警报.. 而是 CSS/HTML 覆盖
  • CSS/HTML 覆盖不会阻止 JS 执行,因此 Jasmine 运行其代码应该没有问题。您遇到的具体问题是什么?你有没有尝试过?
  • 阅读我的更新..当前测试失败但没有给我错误消息(如未找到元素)..它只是失败了。
  • 哪个it 失败了?

标签: javascript jasmine protractor


【解决方案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
        }
    });

【讨论】:

  • 事实证明,我需要使用isPresent() 而不是isDisplayed()
  • 我也很喜欢你的例子,虽然它可能会减慢isPresent()的测试速度
【解决方案2】:

原来..如果一个元素甚至不存在,我就不能使用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();
    });
});

【讨论】:

  • 不错,看起来不错!即使元素不存在,我也能够让 isDisplayed 为我工作,但我是从页面对象调用它,该对象对元素是否存在的“验证”较少。也许这就是区别?
猜你喜欢
  • 2020-05-07
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多