简体   繁体   English

不能使用带有量角器的页面对象模式

[英]Can't use page objects pattern with protractor

I'm following a few examples that i've found to start to organize my tests using page objects. 我正在跟踪一些示例,发现这些示例开始使用页面对象来组织测试。

For example: https://github.com/juliemr/ng-page-e2e/blob/master/test/angularsite_page.js http://codingsmackdown.tv/blog/2014/07/08/using-page-objects-in-angularjs-protractor/ 例如: https : //github.com/juliemr/ng-page-e2e/blob/master/test/angularsite_page.js http://codingsmackdown.tv/blog/2014/07/08/using-page-objects- in-angularjs-量角器/

This is my page object file: 这是我的页面对象文件:

var PageObjects = function() {

    var preenchePsafe = browser.driver.findElement(by.id('global-search'));
    var opcaoPsafe = browser.driver.findElement(by.css('#search > ul > li:nth-child(1) > a'));

    this.abrirUrl = function() {
        dvr.get('http://home.pp.psafe.com/');
    };

    this.pesquisarPsafe = function (pesquisa){

        this.preenchePsafe.sendKeys(pesquisa);
        this.opcaoPsafe.click();
    };

};
module.exports = PageObjects;

and this is my test: 这是我的测试:

var pageObjects = require('./page.js');

describe('PSafe Home', function () {


    beforeEach(function () {
        var pageObjects = new page();
        isAngularSite(false);
        handlePromise = dvr.getAllWindowHandles();
    });

    it ('Pesquisar PSafe', function () {

        browser.get('http://home.psafe.com/');
        pageObjects.pesquisarPsafe('PSafe');

    })});

Then, when i execute i get the following error: 然后,当我执行我得到以下错误:

1) PSafe Home Pesquisar PSafe Message: ReferenceError: page is not defined Stacktrace: ReferenceError: page is not defined at [object Object]. 1)PSafe主页查询PSafe消息:ReferenceError:页面未定义Stacktrace:ReferenceError:页面未在[object Object]中定义。 (C:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\piloto.js:6:31) at c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\jasminewd\\index.js:94:14 at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1654:20) at [object Object].webdriver.promise.ControlFlow.runEventLoop_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1518:8) ==== async task ==== Asynchronous test function: beforeEach() at [object Object]. (C:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ piloto.js:6:31)位于c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ jasminewd \\ index.js:94:14对象]在[对象对象]处的webdriver.promise.ControlFlow.runInNewFrame_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ selenium-webdriver \\ lib \\ webdriver \\ promise.js:1654:20)。 webdriver.promise.ControlFlow.runEventLoop_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ selenium-webdriver \\ lib \\ webdriver \\ promise.js:1518:8)====异步任务=== =异步测试功能:[object Object]中的beforeEach()。 (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\jasminewd\\index.js:93:33) at [object Object]. (c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ jasminewd \\ index.js:93:33),位于[object Object]。 (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\async-callback.js:45:37) at [object Object].jasmine.Block.execute (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:1174:17) at [object Object].jasmine.Queue.next_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:2209:31) at [object Object]._onTimeout (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:2199:18) Error at [object Object]. (c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ async-callback.js:45:37)在[object Object] .jasmine.Block.execute(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:1174:17)在[object Object] .jasmine.Queue.next_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:2209:31)在[object Object] ._ onTimeout(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:2199:18)[对象对象]错误。 (C:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\piloto.js:5:5) at [object Object].jasmine.Env.describe_ (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:913:21) at [object Object].jasmine.Env.describe (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:898:15) at describe (c:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:658:27) at Object. (C:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ piloto.js:5:5)位于[object Object] .jasmine.Env.describe_(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:913:21),位于[object Object] .jasmine.Env.describe(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine- 1.3.1.js:898:15),位于对象的describe(c:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ node_modules \\ protractor \\ node_modules \\ minijasminenode \\ lib \\ jasmine-1.3.1.js:658:27)中。 (C:\\Users\\QARJ\\WebstormProjects\\ProtractorPiloto\\piloto.js:3:1) (C:\\ Users \\ QARJ \\ WebstormProjects \\ ProtractorPiloto \\ piloto.js:3:1)

Edit: 编辑:

After trying a few things, i "got it" doing the following: 尝试了几件事之后,我“明白了”执行以下操作:

this is my spec file: 这是我的规格文件:

 var pageObjectsModule = require('./page.js');

describe('PSafe Home', function () {
    var pageObject;

    beforeEach(function () {
        pageObject = new pageObjectsModule();
        isAngularSite(false);
        handlePromise = dvr.getAllWindowHandles();
    });

    it('Pesquisar PSafe', function () {

        dvr.get('http://home.psafe.com/');
        pageObject.pesquisarPsafe('PSafe');

    })
});

this is my page object file 这是我的页面目标文件

 var PageObjects = function() {

    //var preenchePsafe = dvr.findElement(by.id('global-search'));
    //var opcaoPsafe = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a'));

    this.abrirUrl = function() {
        dvr.get('http://home.psafe.com/');
    };

    this.pesquisarPsafe = function(pesquisa) {

        dvr.findElement(by.id('global-search')).sendKeys(pesquisa);
        //preenchePsafe.sendKeys(pesquisa);
        //this.opcaoPsafe.click();

    };

};

module.exports = PageObjects;

But i had to map the desired element and use sendKeys inside pesquisarPsafe(pesquisa) instead map it outside the function (those commented lines). 但是我不得不映射所需的元素,并在pesquisarPsafe(pesquisa)内使用sendKeys,而不是在函数外部(那些注释行)映射它。 I have no clue why this happens. 我不知道为什么会这样。

It doesn't look like you are naming your variables correctly. 您似乎没有正确命名变量。 Try something like this: 尝试这样的事情:

var PageObjects = require('./page.js');

describe('PSafe Home', function () {

    beforeEach(function () {
        var pageObjects = new PageObjects();
        isAngularSite(false);
        handlePromise = dvr.getAllWindowHandles();
    });

    it ('Pesquisar PSafe', function () {

        browser.get('http://home.psafe.com/');
        pageObjects.pesquisarPsafe('PSafe');

    })
}); 
export class CosmicNovaSelectWardPage extends PageBase 
{

  private btnWardList     : any;
  private lblHeaderTitle  : any;
  private btnCancel       : any;

  constructor() {
    super();
    const element = Elements.CosmicNovaSelectWardPage;
    this.btnWardList = super.findLocators(element.btnWardList.findBy, element.btnWardList.value);
    this.lblHeaderTitle = super.findLocators(element.lblHeaderTitle.findBy, element.lblHeaderTitle.value);
    this.btnCancel = super.findLocators(element.btnCancel.findBy, element.btnCancel.value);
  }

  /**
   * Step: select specific ward from given ward list
   * @param ward
   * @returns {CosmicNovaBaseWardPage}
   */
  public step_selectUserWard(ward: string): CosmicNovaBasePhysicianPage 
  {
    log.info("Step: choose "+ward+" in ward list [:step_selectUserWard:]");
    this.Helper_Actions.findTextAndClick(this.btnWardList,ward);
    return new CosmicNovaBasePhysicianPage();
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM