量角器页面对象问题
Protractor page object issues
我好像卡在了页面对象的构造上。
我阅读了很多关于页面对象的文档,知道它们包含两件事:
- 页面上存在的元素
- 与页面交互的功能
当我检查示例文件时,我发现元素是在每个页面对象的开头定义的。
在测试中,页面对象是通过 require 导入的。
但是我看到的问题是当需求发生时对象还不存在。
有没有另一种方法可以解决这个问题,而不必在页面加载时执行要求?
提前致谢。
问候
有一个新的Protractor 样式指南 即将推出(目前正在审核中),它应该会清楚很多,尤其是页面对象的创建和要求部分。这是当前草稿:
关于你的问题,首先需要将页面对象定义为函数,在构造函数中声明页面对象元素:
var QuestionPage = function() {
this.question = element(by.model('question.text'));
this.answer = element(by.binding('answer'));
this.button = element(by.className('question-button'));
this.ask = function(question) {
this.question.sendKeys(question);
this.button.click();
};
};
module.exports = QuestionPage;
然后,在测试套件的顶部要求您的页面对象:
var QuestionPage = require('./question-page');
describe('My Test', function() {
...
});
在测试套件中实例化您的页面对象:
describe('My Test', function() {
var questionPage = new QuestionPage();
// specs
});
@alecxe 的回答很可靠,但就我个人而言,我更喜欢这样实例化 module.export:
...
module.exports = new QuestionPage();
因此,您只需要在测试中要求它,而不需要在测试中实例化它。只要有可能,我觉得脚手架应该在页面对象中。
我好像卡在了页面对象的构造上。 我阅读了很多关于页面对象的文档,知道它们包含两件事:
- 页面上存在的元素
- 与页面交互的功能
当我检查示例文件时,我发现元素是在每个页面对象的开头定义的。 在测试中,页面对象是通过 require 导入的。 但是我看到的问题是当需求发生时对象还不存在。 有没有另一种方法可以解决这个问题,而不必在页面加载时执行要求?
提前致谢。 问候
有一个新的Protractor 样式指南 即将推出(目前正在审核中),它应该会清楚很多,尤其是页面对象的创建和要求部分。这是当前草稿:
关于你的问题,首先需要将页面对象定义为函数,在构造函数中声明页面对象元素:
var QuestionPage = function() {
this.question = element(by.model('question.text'));
this.answer = element(by.binding('answer'));
this.button = element(by.className('question-button'));
this.ask = function(question) {
this.question.sendKeys(question);
this.button.click();
};
};
module.exports = QuestionPage;
然后,在测试套件的顶部要求您的页面对象:
var QuestionPage = require('./question-page');
describe('My Test', function() {
...
});
在测试套件中实例化您的页面对象:
describe('My Test', function() {
var questionPage = new QuestionPage();
// specs
});
@alecxe 的回答很可靠,但就我个人而言,我更喜欢这样实例化 module.export:
...
module.exports = new QuestionPage();
因此,您只需要在测试中要求它,而不需要在测试中实例化它。只要有可能,我觉得脚手架应该在页面对象中。