我的网页中有超过 500 个网络元素。如果我在 selenium 中使用带有 PageFactory.initElements() 的页面对象模型,一旦创建对象,它将初始化所有元素。
假设我在测试用例中仅使用特定的 Web 元素,假设 30 个,我只想初始化这些 Web 元素,而不是初始化页面中的所有 Web 元素。有什么办法解决这个问题吗?
我猜 AjaxElementLocatorFactory(延迟初始化)会做到这一点。是这样吗?
不,PageFactory 不是这样工作的。元素是延迟加载的...它们仅在需要时才获取。
话虽如此,Selenium 领导者和贡献者已表示出于多种原因不使用 PageFactory。您应该使用实际的页面对象。我在下面放置了一个示例登录页面对象。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage {
WebDriver driver;
private final By usernameLocator = By.id("username");
private final By passwordLocator = By.id("password");
private final By submitButtonLocator = By.cssSelector("button[type='submit']");
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void login(String username, String password) {
driver.findElement(usernameLocator).sendKeys(username);
driver.findElement(passwordLocator).sendKeys(password);
driver.findElement(submitButtonLocator).click();
}
}
然后在你的测试中,你这样称呼它
LoginPage loginPage = new LoginPage(driver);
loginPage.login(username, password);
或更简单地说,
new LoginPage(driver).login(username, password);