po设计模式为什么要将底层方法二次封装举个正反例子
PO(Page Object)设计模式是一种用于测试自动化的设计模式,主要用于封装页面元素和页面操作,以便于测试脚本调用和维护。
底层方法是指与页面元素交互的方法,例如点击、输入文字等。将底层方法进行二次封装的原因主要有以下几点:
-
提高代码的可读性和可维护性:底层方法封装后,可以通过命名规范和注释等方式提高代码的可读性,同时也方便后续维护和修改。
-
隐藏底层实现细节:底层方法的实现可能会涉及一些技术细节,将其封装后,可以隐藏这些细节,使测试脚本更加简洁,同时还能够降低脚本与页面元素的耦合度。
-
提高代码复用性:通过将底层方法进行封装,可以将相同或类似的操作进行抽象,提取成公共的方法,方便其他测试脚本进行复用,减少代码冗余。
反例子:
假设有一个登录页面,其中有一个输入框和一个登录按钮,我们需要编写一个测试脚本来测试登录功能。如果不使用PO设计模式,可以直接在测试脚本中使用底层方法来操作页面元素,例如:
driver.findElement(By.id("username")).sendKeys("admin");
driver.findElement(By.id("password")).sendKeys("123456");
driver.findElement(By.id("loginBtn")).click();
这种方式虽然直接,但是存在以下问题:
- 可读性差:长串的代码难以理解和维护。
- 代码冗余:如果有多个测试脚本需要执行相同的操作,就需要重复编写这些代码,增加了代码冗余。
- 耦合度高:测试脚本直接依赖于页面元素的定位方式,如果页面元素发生变化,就需要修改所有相关的测试脚本。
使用PO设计模式后,可以将底层方法进行封装,例如创建一个LoginPO类:
public class LoginPO {
private WebDriver driver;
public LoginPO(WebDriver driver) {
this.driver = driver;
}
public void inputUsername(String username) {
driver.findElement(By.id("username")).sendKeys(username);
}
public void inputPassword(String password) {
driver.findElement(By.id("password")).sendKeys(password);
}
public void clickLoginButton() {
driver.findElement(By.id("loginBtn")).click();
}
}
然后在测试脚本中调用LoginPO类的方法:
LoginPO login = new LoginPO(driver);
login.inputUsername("admin");
login.inputPassword("123456");
login.clickLoginButton();
通过这种方式,测试脚本的可读性得到了提高,代码也更加简洁,同时还能够方便地复用LoginPO类中的方法。如果页面元素发生变化,只需要修改LoginPO类中的方法即可,而不需要修改所有相关的测试脚本
原文地址: https://www.cveoy.top/t/topic/idz8 著作权归作者所有。请勿转载和采集!