![](/img/trans.png)
[英]Extending Page Object Base class and LoadableComponent<?> together
[英]LoadableComponent in Selenium: isLoaded method is not used when class object comes from another class
第一次海报
我刚刚开始使用Selenium的LoadableComponent模型,这听起来是个好主意。 但是,我不太了解isLoaded方法的调用方式。 让我给你我的例子:
我有两个模型类MainPage和SignIn,单击MainPage中的“登录”链接时将加载“登录”页面。 这是MainPage的代码:
public class MainPage extends LoadableComponent<MainPage>
{
private final WebDriver driver;
@FindBy(linkText = "Sign In")
WebElement signIn;
public MainPage(WebDriver driver)
{
this.driver = driver;
PageFactory.initElements(driver, this);
}
@Override
public void isLoaded() throws Error
{
System.out.println("isLoaded main page being called");
assertEquals(
driver.getTitle(),
"Main page title",
"Invalid title for Home page");
}
@Override
public void load()
{
driver.get(Constants.URL_HOME);
}
public SignInPage signIn()
{
signIn.click();
return new SignInPage(driver);
}
这是SignInPage的代码:
public class SignInPage extends LoadableComponent<SignInPage>
{
private final WebDriver driver;
@FindBy(xpath = "//a[@class='action-link registration']")
WebElement register;
public SignInPage(WebDriver driver)
{
this.driver = driver;
PageFactory.initElements(driver, this);
}
@Override
public void isLoaded() throws Error
{
System.out.println("Calling isLoaded()...");
String url = driver.getCurrentUrl();
assertTrue(url.endsWith("account/signIn"));
WebElement h1 = driver.findElement(By.xpath("//span[@data-label='SIGN_IN']"));
assertTrue(h1.getText().equals("THIS SHOULD REALLY FAIL"));
}
@Override
public void load()
{
driver.get(Constants.URL_SIGNIN);
}
public UserRegistrationPage register()
{
register.click();
return new UserRegistrationPage(driver);
}
public String getTitle()
{
return driver.getTitle();
}
}
现在测试已经相当基本了,我正在加载MainPage并单击SignIn链接。 我希望看到isLoaded()方法为MainPage调用了一次,为SignIn页面调用了一次。 但是,isLoaded()对于MainPage被调用了两次,而对于SignIn页面则从未调用过。 我不明白为什么...这是测试:
@Test
public void newRegistration()
{
MainPage mainpage = new MainPage(driver).get();
SignInPage signInPage = mainpage.signIn();
UserRegistrationPage userRegPage = signInPage.register();
}
我知道了。 测试中的代码应为:
UserRegistrationPage userRegPage = signInPage.register();
userRegPage.get();
我有点奇怪,但是...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.