【发布时间】:2017-01-24 13:02:56
【问题描述】:
我正在重构我的 PageObject 以进行测试。目前,我正在检查模式中 2 个不同按钮中存在的标签。
/* home-spec.js */
it('Some test', function(){
expect(homePage.getButton1Label()).toEqual(expectations.btn1);
expect(homePage.getButton2Label(true)).toEqual(expectations.btn2);
});
虽然这目前可行,但我需要传递一个变量来指示模态是否打开。这就是我要解决的问题。
/* home-page.js */
var HomePage = function () {
function getModalContent(modalName, isModalOpen){
/* isModalOpen = element(by.css('.modal-content')).isPresent(); */
if(!isModalOpen){
var manageProductsView = getUiView('SOME_VIEW');
var btn = getButton(manageProductsView);
btn.click();
browser.waitForAngular();
}
return element(by.css('.modal-content'));
}
function getButtonLabel(buttonBinding, isModalOpen){
/* isModalOpen = element(by.css('.modal-content')).isPresent(); */
var modalcontent = getModalContent('MODAL_NAME', isModalOpen);
var modalFooter = modalcontent.element(by.css('.modal-footer'));
var btn = modalFooter.element(by.binding(buttonBinding));
return btn.getText();
}
return {
getButton1Label: function(isModalOpen){
return getButtonLabel('btn1', isModalOpen);
},
getButton2Label: function(isModalOpen){
return getButtonLabel('btn2', isModalOpen);
}
}
}
我想做的是删除 isModalOpen 依赖项,但我似乎没有找到正确的方法。 cmets 表明我已经尝试过并且似乎是要走的路。还尝试将其包装在 then 块中。
编辑
基于Vlad answer 我编辑了我的getButtonLabel 函数,以便检查模态是否打开
function getButtonLabel(buttonBinding){
return element(by.css('.modal-content')).isPresent().then(function(isModalOpen){
var modalcontent = getModalContent('MODAL_NAME', isModalOpen);
var modalFooter = modalcontent.element(by.css('.modal-footer'));
var btn = modalFooter.element(by.binding(buttonBinding));
return btn.getText();
});
}
试图避免手动处理承诺,但我想在某些情况下这是不可避免的
【问题讨论】:
-
删除 isModalOpen 而不是这个检查模式是否在 if 条件下可见,使用 if(element(by.css('.modal-content')).isDisplayed())
标签: angularjs selenium protractor angularjs-e2e e2e-testing