【问题标题】:Jasmine - Restart browser between tests (it blocks)Jasmine - 在测试之间重新启动浏览器(它会阻塞)
【发布时间】:2019-02-22 14:28:58
【问题描述】:

在我们的 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: true

首先它块正在正确执行。但是,在执行第二次时,它会阻止浏览器立即重新启动和关闭。显示以下错误

失败: 1) 用户权限验证项目合作者非管理员和只读权限组用户的权限 信息: 失败:此驱动程序实例没有有效的会话 ID(您是否调用了 WebDriver.quit()?)并且可能不再使用。 堆: NoSuchSessionError:此驱动程序实例没有有效的会话 ID(您是否调用了 WebDriver.quit()?)并且可能不再使用。

【问题讨论】:

  • 这可能会有所帮助:protractortest.org/#/…
  • 没有注销按钮可以带您回到主登录页面吗?
  • @Barney- 我试过 browser.restart()。但它在非角度登录页面上失败了。
  • @DublinDev- 我尝试了谷歌建议的几乎所有解决方案。没有什么对我有用。作为一种解决方法,我现在正在使用注销:(

标签: selenium-webdriver jasmine protractor jasmine2.0


【解决方案1】:

这里的问题是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);

希望以上回答对你有所帮助...

【讨论】:

    【解决方案2】:

    根据您的测试用例设计,您可以通过在conf.js 文件中设置restartBrowserBetweenTests: false 来实现相同的目的

    并且在每个it 块运行后从浏览器中清除浏览器cookie 和会话。请修改您现有的测试脚本,添加afterEach

    使用现有代码添加以下 sn-p

    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

    【讨论】:

    • @jithinkmatthew- 尝试了您的解决方案,但浏览器仍保留在相同的第一个用户登录实例并尝试查找登录页面
    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 2014-04-02
    • 2011-01-24
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多