Selenium 一维页面对象结构
我遇到的情况是,标准页面对象设计是一维的。这些页面非常大,包含许多(大部分是唯一的)页面部分 页面对象的现有语料库如下所示:Selenium 一维页面对象结构,selenium,selenium-webdriver,webdriver,protractor,qa,Selenium,Selenium Webdriver,Webdriver,Protractor,Qa,我遇到的情况是,标准页面对象设计是一维的。这些页面非常大,包含许多(大部分是唯一的)页面部分 页面对象的现有语料库如下所示: this.pageHeaderLogin = $$('div.header > a.login'); this.pageHeaderSignUp = $$('div.header > a.signup'); this.pageHeaderContact = $$('div.header > a.contact'); this.pageIntroSecti
this.pageHeaderLogin = $$('div.header > a.login');
this.pageHeaderSignUp = $$('div.header > a.signup');
this.pageHeaderContact = $$('div.header > a.contact');
this.pageIntroSectionTitle = $$('div.intro > span.title');
this.pageIntroSectionText = $$('div.intro > span.description');
以此类推,有多达50-100个元素,this
的所有直接子元素
在我看来,更好的结构不是一维的,而是与页面本身的结构类似的划分。因此,我更喜欢使用页面对象,如:
this.pageHeader.login = $$('div.header > a.login');
this.pageHeader.signUp = $$('div.header > a.signup');
...
this.pageIntroSection.title = $$('div.intro > span.title');
等等
不幸的是,有人告诉我这太复杂了。我想提出一个论点,它不仅不复杂,而且实际上更有组织性,但是页面对象的所有示例都太小,无法说明一维结构之外的任何内容
有人能给我指出一个非一维页面对象的好例子吗?我可以用它作为参考来展示这种设计的好处 从理论上讲,Flat总是比嵌套的好,而且只有在嵌套的东西实际上增加了可读性、模块性和可维护性之后。我认为在页面对象中包含子页面对象没有任何错误。当页面对象变得过于复杂并需要拆分为多个部分时,这一点非常有意义 在我们的测试代码库中,我们已经为几个页面对象完成了这项工作。我们已将此类页面对象定义为包-目录,其中包含
index.js
,示例页面对象目录结构:
- po
-- somepage.po.js
-- someotherpage.po.js
-- page.po
-- index.js
-- subpage.po.js
其中,index.js
中有如下内容:
var SubPage = require("./subpage.po"),
var Page = function () {
this.somefield = element(by.id("myid"));
this.subPage = new SubPage(this);
}
module.exports = new Page();
注意,我们在这里将这个
传递给子页面
构造函数,以便它访问父级的页面对象字段,在某些情况下可能很方便
下面是如何在测试中使用此嵌套页面对象:
var page = requirePO("page");
describe("Some Test", function () {
it("should do something good", function () {
page.somefield.click();
page.subPage.someotherfield.sendKeys("test");
});
});
requirePO()
是一个用于“导入”页面对象的实用函数,请参阅:
page.subPage.someotherfield
requirePO
只是一个帮助工具,可以使测试中的requires更具可读性,并且有一种从项目中指定位置导入页面对象的单一方法。谢谢