茉莉花-在测试之间重新启动浏览器(它阻止)

时间:2019-02-22 14:28:58

标签: selenium-webdriver jasmine protractor jasmine2.0

在我们的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()?),因此可能不再使用。

2 个答案:

答案 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);

希望以上答案对您有帮助...