在我们的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("sipqa4@xyz.com","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("sipqa2@xyz.com","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:是
首先,它的块正在正确执行。但是,在执行第二次操作时,它会阻止浏览器立即重新启动和关闭。显示以下错误
失败: 1)用户权限验证对项目协作者非管理员和只读权限组用户的权限 信息: 失败:此驱动程序实例没有有效的会话ID(您是否调用了WebDriver.quit()?),因此可能不再使用。 堆: NoSuchSessionError:此驱动程序实例没有有效的会话ID(您是否调用过WebDriver.quit()?),因此可能不再使用。
答案 0 :(得分:0)
根据测试用例设计,可以通过在restartBrowserBetweenTests: false
文件中设置conf.js
来实现相同的目的
在每次运行it
块之后,还要从浏览器中清除浏览器cookie和会话。请通过添加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,
...
}
如果您设置restartBrowserBetweenTests: true
,这将导致测试速度急剧下降。请参阅this
答案 1 :(得分:0)
这里的问题是开始测试后关闭了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();
您使用的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);
。
希望以上答案对您有帮助...