我正在测试一个可以发生随机叠加的页面。
这些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
答案 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();
});
});