Protractor 量角器-在启动我的测试规范之前执行登录脚本

Protractor 量角器-在启动我的测试规范之前执行登录脚本,protractor,angularjs-e2e,Protractor,Angularjs E2e,这里的基本问题是,我最初尝试登录,启动我的应用程序,然后运行所有规范。结果证明,这不是一个好办法 我不明白的是: 为什么下面的navpanel-spec.js首先运行-在登录和启动js文件之前。换句话说,如果我在navpanel-spec.js中添加browser.pause(),它会立即暂停,甚至在运行login-spec.js代码之前。令人困惑 在我的dragrator.config.js文件中,我有一些规范: specs: [ 'spec/login.js', 'spec/l

这里的基本问题是,我最初尝试登录,启动我的应用程序,然后运行所有规范。结果证明,这不是一个好办法

我不明白的是:

为什么下面的
navpanel-spec.js
首先运行-在登录和启动js文件之前。换句话说,如果我在navpanel-spec.js中添加browser.pause(),它会立即暂停,甚至在运行login-spec.js代码之前。令人困惑

在我的dragrator.config.js文件中,我有一些规范:

specs: [     
 'spec/login.js',
 'spec/launch-awesome-app.js',
 'spec/navpanel-spec.js',        
 'spec/another-spec.js',
 'spec/yet-another-spec.js'
]
login.js
启动awesome app.js
工作正常。他们登录菜单系统,然后点击菜单以启动
myAwesomeapp
-没问题

但是,我在按顺序启动这些文件时遇到问题。我认为这与Selenium控制流有关,因为它似乎正在解析所有规范文件并立即执行任何
浏览器。
命令

我正在寻找解决方案,或者更好的方法:

1) 登录菜单框架

2) 单击菜单以启动相应的URL

3) 最后运行步骤2中以URL为目标的spec.js文件

这是我的原始
navpanel-spec.js
版本:

description('testingmyawesomeapp',函数(){
var panelObj=新的PanelObjects();
var urlDefault=https://server/apps/Default.aspx?r=1';
var urlApp=https://server/apps/MyAwesomeApp.html';
browser.get(urlApp);//正常运行我的AwesomeApp测试,但它会启动一个新的浏览器窗口。
browser.get(urlDefault);//启动带有顶部导航菜单和嵌入式的应用程序框架,
//但是,我无法在此处选择iframe并成功运行测试。
beforeach(函数(){
浏览器。睡眠(5000);
browser.waitForAngular();
});    
//用例对象!!
var items=browser.params.useCaseJsonFile[“navigatePanels”];
browser.getAllWindowHandles().then(函数(句柄){
handles.map(函数(win、idx){
browser.driver.getCurrentUrl().then(函数(curr){
if(curr.indexOf('Default.aspx')>=0){
browser.driver.switchTo().window(句柄[idx]);
}
});
});
});
browser.switchTo().frame(元素(by.id('1')).getWebElement());
var testId=元素(by.id('middle');
console.log(testId);
items.map(功能(项目){
if(项目启用测试){
var specItem=it(item.name,函数(){
console.log('-----------------------------------');
console.log('---'+item.description);
browser.waitForAngular();
//选择面板等。。
panelObj.panelClick(item.panelName)
// ...
});
panelObj.getPanelText(item.panelName)。然后(函数(标题){
expect(title).toContain(item.panelTitle);
});
});
}
});

});我认为您这样做是错误的,您的规格不应该相互依赖。规格的想法是,您可以并行运行它们,并且彼此独立

在我的项目中,我在beforeAll()方法中使用了一个登录函数,该函数是从需要它的测试中调用的(在每个规范中我只登录一次)

所以我认为,如果你的规格都取决于前一个的结果,你应该加入他们,或者找到一种方法使他们独立


祝你好运

更新-@finspin为我的登录/启动问题提供了页面对象方法。请显示
navpanel-spec.js
spec文件内容,谢谢。是的,谢谢@Martin。这正是我最后要做的。另一张海报也建议使用页面对象模式,每个规范都会调用我的登录例程。我一直在等待他在这里发布他的答案……然而,我的规范并不相互依赖。这只是我一直在努力解决的登录问题。正如您所说,在运行每个规范之前登录,或者只登录一次,然后立即运行所有规范。正如你所说,我相信beforeAll()是最好的解决方案。