Selenium WebDriver PageFactory Webelement 初始化

问题描述 投票:0回答:1

我的网页中有超过 500 个网络元素。如果我在 selenium 中使用带有 PageFactory.initElements() 的页面对象模型,一旦创建对象,它将初始化所有元素。

假设我在测试用例中仅使用特定的 Web 元素,假设 30 个,我只想初始化这些 Web 元素,而不是初始化页面中的所有 Web 元素。有什么办法解决这个问题吗?

我猜 AjaxElementLocatorFactory(延迟初始化)会做到这一点。是这样吗?

selenium-webdriver initialization pageobjects lazy-initialization page-factory
1个回答
0
投票

不,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);
© www.soinside.com 2019 - 2024. All rights reserved.