1

我在互联网上搜索了一下,但认为我可以通过在 stackoverflow 上发布并查看是否有任何意见来获得一些见解。

我想知道是否有人认为在这两种设置页面对象的方式中哪个更受欢迎:

public class LoginPage extends PageObject{
   public void typeEmail(String email){
       driver.findElement(EMAIL_SELECTOR).sendKeys(email);
   }

   public void typePassword(String pw){
       driver.findElement(PASSWORD_SELECTOR).sendKeys(email);
   }

   public void submit(){
       driver.findElement(SUBMIT_SELECTOR).click();
   }
}

...和...

public class LoginPage extends PageObjects{
    public void login(String email, String password){
       driver.findElement(EMAIL_SELECTOR).sendKeys(email);
       driver.findElement(PASSWORD_SELECTOR).sendKeys(email);
       driver.findElement(SUBMIT_SELECTOR).click();
   }
}

最初,我认为第二种方式会更好,因为如果登录流程由于某种原因发生变化(登录不太可能发生这种情况,但您可以推测其他类型的表单会发生这种情况),您可以更新 login() 方法和这个更改将影响所有需要登录的测试。

但是,如果您想在 submit() 之前验证错误条件或更多内容,则第二种解决方案不够灵活。

欢迎任何见解。

4

2 回答 2

1

页面对象定义: “PageObject 不必代表整个页面。它可能代表在站点或页面中多次出现的部分,例如站点导航。”

PageObject 的关键点:

- The public methods represent the services that the page offers
- Try not to expose the internals of the page
- Generally don't make assertions
- Methods return other PageObjects
- Need not represent an entire page
- Different results for the same action are modelled as different methods

资源

您的两个设置不是 PageObject 但有一些相似之处。

于 2013-06-20T12:27:27.807 回答
0

就个人而言,我更喜欢使用另一个抽象级别,例如:

public void typeEmail(String email){
       fillField(EMAIL_SELECTOR, email);
   }

以及您的 SeleniumWrapper 类中的一个实现

public void fillField(WebElement selector, String text){
       driver.findElement(selector).sendKeys(text);
   }

这使得代码更好看

这与 PageObjects 没有直接关系,但如果您不使用 BDD 或关键字驱动的方法,这仍然是一种美化代码的方法

于 2013-07-05T13:32:10.660 回答