Selenium webdriver 为什么需要查找所有页面对象?

Selenium webdriver 为什么需要查找所有页面对象?,selenium-webdriver,cucumber,protractor,Selenium Webdriver,Cucumber,Protractor,我的应用程序由angularJS和非angularJS页面组成。 因此,我使用量角器对黄瓜进行e2e测试。 我正在尝试使用pageObjects组织测试 文件夹结构如下: 特征 |_ step_definitions |- login.steps.js gmail.feature 页面对象 |- createAccount.js |- gmailPage.js progrator.conf.js gmail.feature Feature: Gmail login page

我的应用程序由angularJS和非angularJS页面组成。 因此,我使用量角器对黄瓜进行e2e测试。 我正在尝试使用pageObjects组织测试

文件夹结构如下:

特征

|_  step_definitions

  |- login.steps.js

gmail.feature
页面对象

 |- createAccount.js

 |- gmailPage.js
progrator.conf.js

gmail.feature

Feature: Gmail login page

@dev    
Scenario: Create new gmail account
Given I see gmail home page
When I Create an account
Then I should see account creation form
gmailPage.js

'use strict';

var gmail = function () {
this.btnCreateAccount = driver.findElement(By.css('#gmail-create-account'));
};

module.exports = gmail;
'use strict';

var ca = function () {
this.inpFirstName = driver.findElement(By.css('#firstname'));
};

module.exports = ca;
'use strict';

var expect = require('chai').expect;
var gmail = new (require('../../pageObject/gmailPage'))();
var ca = new (require('../../pageObject/createAccount'))();

module.exports = function(){
this.Given(/^I see gmail home page$/, function (callback) {
  driver.getCurrentUrl().then(function(url){
          expect(url).to.contain('https://www.gmail.com/intl/en/mail/help/about.html');
    callback();
  });
});



this.When(/^I Create an account$/, function (callback) {
  gmail.btnCreateAccount.click();
  callback();
});

this.Then(/^I should see account creation form$/, function (callback) {
  callback();
});

};
createAccount.js

'use strict';

var gmail = function () {
this.btnCreateAccount = driver.findElement(By.css('#gmail-create-account'));
};

module.exports = gmail;
'use strict';

var ca = function () {
this.inpFirstName = driver.findElement(By.css('#firstname'));
};

module.exports = ca;
'use strict';

var expect = require('chai').expect;
var gmail = new (require('../../pageObject/gmailPage'))();
var ca = new (require('../../pageObject/createAccount'))();

module.exports = function(){
this.Given(/^I see gmail home page$/, function (callback) {
  driver.getCurrentUrl().then(function(url){
          expect(url).to.contain('https://www.gmail.com/intl/en/mail/help/about.html');
    callback();
  });
});



this.When(/^I Create an account$/, function (callback) {
  gmail.btnCreateAccount.click();
  callback();
});

this.Then(/^I should see account creation form$/, function (callback) {
  callback();
});

};
login.steps.js

'use strict';

var gmail = function () {
this.btnCreateAccount = driver.findElement(By.css('#gmail-create-account'));
};

module.exports = gmail;
'use strict';

var ca = function () {
this.inpFirstName = driver.findElement(By.css('#firstname'));
};

module.exports = ca;
'use strict';

var expect = require('chai').expect;
var gmail = new (require('../../pageObject/gmailPage'))();
var ca = new (require('../../pageObject/createAccount'))();

module.exports = function(){
this.Given(/^I see gmail home page$/, function (callback) {
  driver.getCurrentUrl().then(function(url){
          expect(url).to.contain('https://www.gmail.com/intl/en/mail/help/about.html');
    callback();
  });
});



this.When(/^I Create an account$/, function (callback) {
  gmail.btnCreateAccount.click();
  callback();
});

this.Then(/^I should see account creation form$/, function (callback) {
  callback();
});

};
问题: 当我运行这个测试时,我得到了
“NoSuchElementError”
,因为它正在寻找
WebDriver.findElement(By.cssSelector(“#firstname”)
出现在createAccount.js中

我的问题是,为什么webdriver在调用页面对象之前要在文件中查找所需的页面对象。
为什么在使用量角器驱动程序时同样的用例会起作用?

尝试在登录步骤模块中实例化页面对象

'use strict';

var expect = require('chai').expect;
var gmailPage = require('../../pageObject/gmailPage');
var createAccountPage = require('../../pageObject/createAccount');

module.exports = function(){
  var gmail = new gmailPage();
  var ca = new createAccountPage();
  this.Given(/^I see gmail home page$/, function (callback) {
    driver.getCurrentUrl().then(function(url){
      expect(url).to.contain('https://www.gmail.com/intl/en/mail/help/about.html');
      callback();
    });
  });

  this.When(/^I Create an account$/, function (callback) {
    gmail.btnCreateAccount.click();
    callback();
  });

  this.Then(/^I should see account creation form$/, function (callback) {
    callback();
  });

};

你是对的,它会起作用的。但是,我想了解为什么在使用webdriver-driver时会发生这种情况,而在使用量角器驱动程序-ptor时不会发生这种情况。所以,您的问题应该更具体一些。