Javascript AngularJS量角器E2E测试中的页面对象

Javascript AngularJS量角器E2E测试中的页面对象,javascript,angularjs,protractor,angularjs-e2e,Javascript,Angularjs,Protractor,Angularjs E2e,为AngularJS编写量角器E2E测试时,处理页面对象模型的正确方法是什么?我觉得我应该把它们写在单独的文件中(比如homepage.js、page2.js等等),然后根据需要将它们包含到规范中,比如模块中。然而,我不知道如何注射它们。如有任何建议,我们将不胜感激。谢谢 您应该将它们保存在单独的文件中,是的 在量角器引用conf.js(启动量角器的配置)中,您应该写: specs: ['<your_path>/test/pages/*Test.js'] specs:['/test

为AngularJS编写量角器E2E测试时,处理页面对象模型的正确方法是什么?我觉得我应该把它们写在单独的文件中(比如homepage.js、page2.js等等),然后根据需要将它们包含到规范中,比如模块中。然而,我不知道如何注射它们。如有任何建议,我们将不胜感激。谢谢

您应该将它们保存在单独的文件中,是的

在量角器引用conf.js(启动量角器的配置)中,您应该写:

specs: ['<your_path>/test/pages/*Test.js']
specs:['/test/pages/*test.js']

在这种情况下,*test.js(loginPageTest.js,homePageTest.js)从dir/test/pages启动所有文件将它们保存在单独的文件中,并使用节点的
require
拉入您需要的任何帮助程序或页面对象。看看这个超级简单的例子:

关于页面对象的测试,恐怕没有通用的标准。 你可以在量角器的问题中找到几个建议:和

出于我的需要,我在开源项目中创建了非常简单的页面对象,请参见:


中也可以找到非常有趣的实现,您是否尝试过使用星盘?它是位于量角器之上的PageObject实现,可以指导您的结构:

在这里,您可以看到建议的结构是每个文件一个页面对象

例如:singInPage.js

var Page = require('astrolabe').Page;

module.exports = Page.create({

   url: { value: 'http://<somesite>.com/signin' },

   username: { get: function() { return this.findElement(this.by.input('username')); } }, // finds an input element with the name 'username'
   submit:   { get: function() { return this.findElement(this.by.id('submit')); } }       // finds an element with the id 'submit'
});
var Page=require('astrolabe')。Page;
module.exports=Page.create({
url:{值:'http://.com/signin' },
用户名:{get:function(){返回this.findElement(this.by.input('username'));}},//查找名为'username'的输入元素
submit:{get:function(){返回this.findElement(this.by.id('submit'));}}//查找id为'submit'的元素
});

它使编写测试用例甚至页面对象变得非常紧凑和可读。

不幸的是,我还不知道如何在单个文件中启动测试,而不更改配置中的“规格”。另外,如果您想在IDE中调试测试,这篇文章可能会很有帮助:我昨晚在尝试实现这一点时发现,在规范中不能包含这样的页面对象。每个文件都独立于其他文件运行。我最终围绕节点的需求构建了一个系统。@wlingke我这里也有一个类似的问题。你能告诉我你做了什么来解决这个问题吗?@shimu我最后设置这个的方式是使用require()。Jmr发布的示例非常好。我也遇到了这个项目,你可以使用。不过,我最终还是创建了自己的模型——这并不难。