简体   繁体   English

Selenium中的LoadableComponent:当类对象来自另一个类时,不使用isLoaded方法

[英]LoadableComponent in Selenium: isLoaded method is not used when class object comes from another class

First time poster.. 第一次海报

I just started using LoadableComponent model from Selenium and it sounds like a great idea. 我刚刚开始使用Selenium的LoadableComponent模型,这听起来是个好主意。 However, I don't quite understand how isLoaded method is being called. 但是,我不太了解isLoaded方法的调用方式。 Let me give you my example: 让我给你我的例子:

I have two model classes MainPage and SignIn, SignIn page is being loaded when clicking "Sign In" link in MainPage. 我有两个模型类MainPage和SignIn,单击MainPage中的“登录”链接时将加载“登录”页面。 Here is the code for 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);
}

Here's the code for SignInPage: 这是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();
}
}

Now the test is quite basic, I am loading the MainPage and clicking on SignIn link. 现在测试已经相当基本了,我正在加载MainPage并单击SignIn链接。 I would expect to see that isLoaded() method is called once for MainPage and once for SignIn page. 我希望看到isLoaded()方法为MainPage调用了一次,为SignIn页面调用了一次。 However, isLoaded() is being called twice for MainPage and never for SignIn page. 但是,isLoaded()对于MainPage被调用了两次,而对于SignIn页面则从未调用过。 I fail to understand why... Here's the test: 我不明白为什么...这是测试:

@Test
public void newRegistration()
{
    MainPage mainpage = new MainPage(driver).get();
    SignInPage signInPage = mainpage.signIn();
    UserRegistrationPage userRegPage = signInPage.register();

}

I got it. 我知道了。 The code in test should be: 测试中的代码应为:

 UserRegistrationPage userRegPage = signInPage.register();
 userRegPage.get();

A bit odd to me, but... 我有点奇怪,但是...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM