Angularjs 返回模态元素,必要时将其打开
我正在为我的测试重构我的系统。目前,我正在检查模式中两个不同按钮中的标签Angularjs 返回模态元素,必要时将其打开,angularjs,selenium,protractor,angularjs-e2e,e2e-testing,Angularjs,Selenium,Protractor,Angularjs E2e,E2e Testing,我正在为我的测试重构我的系统。目前,我正在检查模式中两个不同按钮中的标签 /* home-spec.js */ it('Some test', function(){ expect(homePage.getButton1Label()).toEqual(expectations.btn1); expect(homePage.getButton2Label(true)).toEqual(expectations.btn2); }); 虽然这目前起作用,但我需要传递
/* 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
依赖项,但我似乎没有找到正确的方法。这些评论表明了我已经尝试过的,并且似乎是我要走的路。还尝试将其包装到然后
块中
编辑基于此,我编辑了我的
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();
});
}
试图避免手动处理承诺,但我想在某些情况下,这是不可避免的
function getModalContent(modalName){
var modalContent = element(by.css('.modal-content'));
var isModalOpen = modalContent.isPresent();
return isModalOpen.then(function(open) {
if(!open){
var manageProductsView = getUiView('SOME_VIEW');
var btn = getButton(manageProductsView);
return btn.click()
.then(function(){
return modalContent;
});
}
return modalContent;
});
}
function getButtonLabel(buttonBinding){
var modalcontent = getModalContent('MODAL_NAME');
var btnText = modalcontent
.then(function(content) {
return content
.element(by.css('.modal-footer'))
.element(by.binding(buttonBinding))
.getText();
});
return btnText;
}
请注意,测试后模式保持打开状态,如果它处于打开状态以在整个测试中保持一致状态,则可能需要添加一些内容来关闭它
在对它进行操作之前,最好先确定它是否已打开,这样,如果它未打开并且需要打开,您就可以自己打开它,而不是执行类似于这些条件的操作—由于承诺链接,这些条件非常昂贵
我的总体感觉是,逻辑看起来有点太复杂了,您可能希望将来重构一些东西:p删除isModalOpen,而不是在if条件下检查模态是否可见,而是使用if(element(by.css('.modal content')).isDisplayed(),这很有帮助。根据您的输入,我更新了我的
getButtonLabel
函数。在编辑页面上查看一下