在selenium中使用AjaxElementLocatorFactory来优化PO模式
之前看到的一篇对于 po 的改进的文章,非常有启发,简单翻译改写了一下,希望对大家有帮助。本文基于 java,至于其他语言是否有类似的实现,没有具体研究过。
PO 模式是 page object factory 设计模式的简称,主要是以页面为维度来聚合一些元素的定位,让代码有更好的维护性和重用性,具体细节可以看这里:https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models。这里是官方文档,非常值得精读。
Page Factory
如果你已经对 po 很熟悉了,下面的内容可以放心跳过。
下面是最基本的 Page Factory 套路,本质上是按页面去封装元素定位和操作。
public class PageObjectExample {
private final WebDriver driver;
public PageObjectExample(WebDriver driver) {
this.driver = driver;
}
public void login(String email, String password) {
driver.findElement(By.id("email")).sendKeys(email);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.name("next")).click();
}
}
上面的代码只能说懂的都懂,不过这里有个问题,在 login 方法里,我们频繁使用driver.findElement方法,这会显得有一些的啰嗦,下面是改进版本,优雅了很多。
public class PageObjectExample {
@FindBy(id = "email")
private WebElement email;
@FindBy(id = "password")
private WebElement password;
@FindBy(name = "next")
private WebElement next;
public PageObjectExample(WebDriver driver) {
PageFactory.initElements(driver, this);
}
public void login(String email, String password) {
this.email.sendKeys(email);
this.password.sendKeys(password);
next.click();
}
}
这里要注意的是在进行初始化的时候,需要调用PageFactory.initElements(driver, this);