访问页面对象模型

时间:2017-03-28 18:08:51

标签: nightwatch.js

我正在努力自动化表单来创建个人资料。在这样做时,我观察到了一些我需要理解的东西。请查看下面的代码,如果有人能解释其背后的原因,那将是多么好。

我正在为我的项目使用页面对象。 我在元素下定义了选择器,我正在访问下面函数中的元素/选择器。

我无法访问以下代码的函数内部的元素

对于this.api.perform函数,当我尝试访问元素(subjectGenderFemale)以点击它时,它出错并出现错误"错误:无法找到元素:" @ subjectGenderFemale&# 34;使用:css选择器"。所以我必须使用实际的选择器'输入[value =" F"]'来访问它。请参阅以下代码@ .api.perform。

'use strict';
var assert = require('assert');

var subjectJSON = require('../../../e2e/data/subjectData.json');

module.exports = {
   elements: {
    newSubjectButton: {
      selector: '.btn.btn--primary'
},
subjectFirstName: {
  selector: 'input[name^="first_name"]'
},
subjectLastName: {
  selector: 'input[name^="last_name"]'
},
subjectDateOfBirth: {
  selector: 'input[name^="date_of_birth"]'
},
subjectGenderFemale: {
  selector: 'input[value="F"]'
},
subjectGenderMale: {
  selector: 'input[value="M"]'
},
submitButton: {
  selector: '.col.col-sm-offset-2.col-sm-8>div>form>button'
}
  },
  commands: [{
openCreateSubjectForm: function() {
  return this
    .waitForElementPresent('@newSubjectButton', 1000)
    //the below href needs to change to proper element
    .click('a[href="/subject/create"]')
},
populateSubjectForm: function() {
  return this
  .setValue('@subjectFirstName', subjectJSON["createSubject"]["firstName"])
  .setValue('@subjectLastName', subjectJSON["createSubject"]["lastName"])
  .setValue('@subjectDateOfBirth', subjectJSON["createSubject"]["dateOfBirth"])
  .api.perform(function() {
    if (subjectJSON["createSubject"]["gender"]=="F") {
      this.api.click('input[value="F"]')
    }else if (subjectJSON["createSubject"]["gender"]=="M") {
      this.api.click('input[value="M"]')
    }else if (subjectJSON["createSubject"]["gender"]=="Both") {
      this.api.click('input[value="Both"]')
    }else {
      this.api.click('input[value="No preference"]')
    }
  })
},
submitCreateSubjectForm: function() {
  return this.click('@submitButton');
 }
}]
};

1 个答案:

答案 0 :(得分:0)

我通过this.elements.subjectGenderFemale.selector

访问此问题