簡體   English   中英

Selenium中的LoadableComponent:當類對象來自另一個類時,不使用isLoaded方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM