Protractor Jasmine实现Angular4应用Form1与Form2 E2E测试链式执行
实现Protractor Jasmine中Form1与Form2的链式E2E测试
要实现分文件的链式测试且共享登录状态,核心是让所有测试复用同一个浏览器会话,同时确保Form1测试完成后浏览器处于Form2页面。下面是具体的实现方案:
1. 修改Protractor配置文件(protractor.conf.js)
首先要关闭浏览器在测试文件间的自动重启,这样整个测试流程会使用同一个浏览器实例,登录状态会被保留。同时指定测试文件的执行顺序,确保Form1先运行:
exports.config = { // 其他配置项... restartBrowserBetweenTests: false, // 关键:禁用浏览器重启 specs: [ './e2e/form1.test-spec.ts', // 先执行Form1测试 './e2e/form2.test-spec.ts' // 再执行Form2测试 ], // 其他配置项... };
2. 调整Form1的测试文件(form1.test-spec.ts)
只在全局的beforeAll中执行一次登录,测试用例完成Form1的填写和提交后,确保浏览器导航到Form2页面:
describe('Form 1 Test', function() { beforeAll(() => { commonService.doLogin(); // 仅登录一次 }); it('should fill and submit Form1 successfully, navigate to Form2', () => { // 1. 填写Form1的逻辑 element(by.id('form1-input-name')).sendKeys('Test User'); element(by.id('form1-input-email')).sendKeys('test@example.com'); // ... 其他Form1字段填写 // 2. 提交Form1 element(by.id('form1-submit-btn')).click(); // 3. 验证已跳转到Form2页面(确保后续测试的起始状态正确) expect(browser.getCurrentUrl()).toContain('/form2'); }); });
3. 编写Form2的测试文件(form2.test-spec.ts)
由于浏览器已经保留了登录状态,且处于Form2页面,直接编写Form2的测试逻辑即可,无需再次登录:
describe('Form 2 Test', function() { it('should fill and submit Form2 successfully', () => { // 直接操作Form2元素,无需登录 element(by.id('form2-input-address')).sendKeys('123 Test St'); element(by.id('form2-input-phone')).sendKeys('1234567890'); // ... 其他Form2字段填写 // 提交Form2并验证结果 element(by.id('form2-submit-btn')).click(); expect(element(by.css('.success-message')).isDisplayed()).toBeTruthy(); }); });
关键原理说明
restartBrowserBetweenTests: false:这个配置让Protractor在所有测试文件执行期间复用同一个浏览器实例,因此登录状态、Cookie、localStorage等都会被保留。- 测试顺序控制:通过在
specs数组中指定文件顺序,确保Form1测试先完成,浏览器处于正确的Form2页面后,再执行Form2的测试。 - 状态验证:在Form1的测试结尾添加URL验证,确保后续Form2测试的起始状态是正确的,避免因页面跳转失败导致的测试错误。
如果需要在测试失败后终止后续执行,可以考虑使用Jasmine的fail-fast插件,但默认情况下Jasmine会继续执行所有测试用例。
内容的提问来源于stack exchange,提问作者stuckoverflow24
相关产品推荐
相关产品推荐

