在我们的Protractor + Jasmine框架中尝试在不同登录用户的测试之间重启浏览器。因为我们有非角度登录页面,登录后导航到角度页面。以下是我的主要测试规范文件
describe('User Permissions', function() {
var docsLoginPage = require('../pages/CLM_Page.js');
var projectsPage = require('../pages/Projects_Page.js');
var contentPage = require('../pages/Content_Page.js');
beforeEach(function() {
browser.ignoreSynchronization = true;
browser.get('http://be-docs-dev.xyz.local/');
});
it('Verify permissions for Non Admin and Read only permission group user', function() {
docsLoginPage.loginToDocs("[email protected]","Yahoo@123");
expect(browser.getTitle()).toEqual('abc');
browser.ignoreSynchronization = false;
expect(projectsPage.checkElementExistsById('headers_nav_projects')).toBe(false);
expect(contentPage.checkElementExistsById("content_browse_options_folder_settings")).toBe(false);
expect(contentPage.checkElementExistsById('content_browse_options_new_menu')).toBe(false);
});
it('Verify permissions for Project collaborator Non Admin and Read only permission group user', function() {
/*browser.restart().then(function(){
console.log("-----------Restarted the browser---------------");
});*/
docsLoginPage.loginToDocs("[email protected]","Yahoo@123");
expect(browser.getTitle()).toEqual('abc');
browser.ignoreSynchronization = false;
expect(projectsPage.checkElementExistsById('headers_nav_content')).toBe(false);
expect(contentPage.checkElementExistsById("projects_browse_options_folder_settings")).toBe(false);
expect(contentPage.checkElementExistsById('projects_browse_options_new_menu')).toBe(false);
});
});
和CLM_Page.js
var CLM_page = function() {
this.userName = element(By.id('userName'));
this.password = element(By.id('password'));
this.signIn = element(By.className('btn btn-primary'));
this.loginToDocs = function(userName, password) {
browser.driver.manage().window().maximize();
browser.driver.manage().timeouts().implicitlyWait(10000);
this.userName.sendKeys(userName);
this.signIn.click();
this.password.sendKeys(password);
return this.signIn.click();
};
};
module.exports = new CLM_page();
在conf文件中设置为
restartBrowserBetweenTests:true
首先它正在执行块。然而,当执行第二次时,它会阻止浏览器立即重启和关闭。显示以下错误
失败:1)用户权限验证项目协作者非管理员和只读权限组用户的权限消息:失败:此驱动程序实例没有有效的会话ID(您是否调用了WebDriver.quit()?)并且可能不再使用。 Stack:NoSuchSessionError:此驱动程序实例没有有效的会话ID(您是否调用了WebDriver.quit()?)并且可能不再使用它。
这里的问题是webdriver会话在开始测试后关闭。
restartBrowserBetweenTests: true
没有问题,因为您的浏览器在第一次测试后重新启动。
因为您正在从非角度应用到角度应用。遵循以下
browser.driver.get('http://localhost:8000/login.html');
browser.driver.findElement(by.id('username')).sendKeys('Jane');
browser.driver.findElement(by.id('password')).sendKeys('1234');
browser.driver.findElement(by.id('clickme')).click();
您正在使用不推荐使用的qazxsw poi。尝试使用qazxsw poi。
让browser.ignoreSynchronization = true;
成为
waitForAngularEnabled(true)
移动到角度页面后,使其成为BeforEach()
。
希望以上答案可以帮助你......
根据您的测试用例设计,您可以通过在beforeEach(function() {
browser.waitForAngularEnabled(false); // to tell protractor that this is a non- anularg page
browser.get('http://be-docs-dev.xyz.local/');
});
文件中设置browser.waitForAngularEnabled(true);
来实现相同的目的
并且在每个restartBrowserBetweenTests: false
块运行后,还要从浏览器中清除浏览器cookie和会话。请添加conf.js
修改现有的测试脚本
使用现有代码添加以下代码段
it
afterEach
功能应该是这样的
afterEach(function () {
browser.manage().deleteAllCookies();
browser.executeScript('window.sessionStorage.clear();window.localStorage.clear();');
});
在beforeEach
。
beforeEach(function() {
browser.waitForAngularEnabled(false);
browser.get('http://be-docs-dev.xyz.local/');
});
默认值为conf.js
。因此,不必将其设置为Note:
false
如果你设置false
,这将导致你的测试大幅减慢。请参考exports.config = {
...
restartBrowserBetweenTests: false,
...
}