gpt4 book ai didi

java - 使用 Java 在 Selenium WebDriver 中使用 PageObjects、Page Factory 和 WebDriverWait

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:20 24 4
gpt4 key购买 nike

我一直在使用 Selenium WebDriver 为我参与的一些项目实现功能测试。我正在尝试将页面对象设计模式与页面工厂一起使用来分解我的定位器。我还创建了一个静态 WaitTool 对象(单例),它使用可选的超时参数实现了多种等待技术。

我当前的问题是我想在 PageFactory 尝试初始化 WebElements 之前使用我的等待方法。我想等待的原因是 PageFactory 可能会在页面元素可用之前尝试初始化页面元素。

这是一个示例 PageObject:

public class SignInPage extends PageBase {
@FindBy(id = "username")
@CacheLookup
private WebElement usernameField;

@FindBy(id = "password")
@CacheLookup
private WebElement passwordField;

@FindBy(name = "submit")
@CacheLookup
private WebElement signInButton;

public SignInPage(WebDriver driver) {
super(driver);

WaitTool.waitForPageToLoad(driver, this);

// I'd like initialisation to occur here
}

public MainPage signInWithValidCredentials(String username, String password){
return signIn(username, password, MainPage.class);
}

private <T>T signIn(String username, String password, Class<T> expectedPage) {
usernameField.type(username);
passwordField.type(password);
signInButton.click();

return PageFactory.initElements(driver, expectedPage);
}
}

这是一个示例测试对象:

public class SignInTest extends TestBase {
@Test
public void SignInWithValidCredentialsTest() {
SignInPage signInPage = PageFactory.initElements(driver, SignInPage.class);

MainPage mainPage = signInPage.signInWithValidCredentials("sbrown", "sbrown");

assertThat(mainPage.getTitle(), is(equalTo(driver.getTitle())));
}
}

我倾向于将我的逻辑尽可能多地放在页面对象中(包括等待),因为它使测试用例更具可读性。

最佳答案

PageFactroy 中的 WebElements 实际上是 WebElements 的代理。这意味着每次您访问 WebElement 时,它都会执行搜索以查找页面上的元素。

这有一些优点:

  • 初始化 PageFactory 时配置代理,但此时未找到 WebElement(因此您不会得到 NoSuchElementException)
  • 每次您使用 WebElement 时,它都会再次找到它,因此您不应该遇到 StaleElementException 的

您正在使用 @CacheLookup 注释,这会失去第二个好处,因为它会找到该元素一次,然后保留对它的引用,您现在更有可能看到 StaleElementExceptions。

话虽这么说,您仍然保留了主要的好处,即 Selenium 不会进入页面并在您第一次使用它之前实际找到该元素。

所以总而言之,你需要做的就是移动

PageFactory.initElements(driver, this);

进入你的构造函数,一切都会正常工作。

关于java - 使用 Java 在 Selenium WebDriver 中使用 PageObjects、Page Factory 和 WebDriverWait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com