在开发页面对象模型时,通常的目的是将页面抽象为保持代码可重用性和增加可读性的方法。
一些我经常被困在一个多高的层次上的东西,我会抽象化吗?例如,类似于登录表单(或者实际上是大多数表单)。
我通常会编写类似的代码(这是在Cypress fwiw中,但假装它在您选择的任何自动化框架中。下面的代码是JavaScript):
setEmail(value) {
const field = cy.get('.form-control[name="username"]');
field.clear();
field.type(value);
return this;
}
setPassword(value) {
const field = cy.get('.form-control[name="password"]');
field.clear();
field.type(value);
return this;
}通常,在这一点上,我想知道"Hmmm是否应该继续,并将这个表单n输入封装到一个更大的方法中,比如“:
login(email, password) {
this.setEmail(email);
this.setPassword(password);
this.submit();
}在这一点上,我提出了一个问题:“为什么还要费心编写独立的输入方法”。
那么,如果我编写了一个更大的“公共”方法,我是否应该费心编写更小的私有方法,那么如何决定何时值得编写包含多个其他私有methods...and的大型方法?
我在PoM的某个地方读到,我们应该:
建模用户行为而不是用户界面
当我想到这句话的时候,特别是在形式上,我觉得这是一种“更大”的方法。我看到将它们分开的唯一真正优势是,万一我需要测试负的情况(例如,不是所有的输入都填好了)。从技术上讲,它可以有条件地添加到更大的表单中(但当有多个输入时也会很痛苦)。
这里的最佳做法是什么?
发布于 2020-02-09 08:28:05
我不认为PoM模式是为了对行为建模。而是一个用户界面。测试的目的是为行为建模。
如果您的对象不那么抽象,那么您可以更精确地断言结果。只有一个登录方法不会让您断言在登录中发生的事情。从技术上讲,我们可以这样做,但是在您的页面类中断言任何内容都是非常糟糕的做法。
因此,我会将行为解耦到一个单独的类。
发布于 2020-02-09 08:38:53
在编写或任何测试框架时,没有任何硬规则。关键是确定使其可重用、易于理解和减少维护工作量的方法。
我所遵循的一些程序是:
我应该费心写一个像登录这样的包装器函数吗?
我应该有单独的方法吗?
看上去比
let a= page1.goto();
a.click(loginButton)
a.sendkeys('test')发布于 2020-02-10 11:08:31
我想更进一步,并且像用户一样对测试数据进行抽象。
login(user) {
this.setEmail(user.email);
this.setPassword(user.password);
this.submit();
}此userObject可以检查它是否存在,并自行设置。我不喜欢在测试中硬编码密码之类的东西。
当将较大的方法拆分为较小的方法时,请遵循清洁代码原则。
https://sqa.stackexchange.com/questions/42480
复制相似问题