为什么'loadableComponent'跳过load()方法?

时间:2014-09-12 12:06:40

标签: design-patterns selenium

我试图第一次使用selenium'LoadableComponent'来加载我的页面。

这是我的简单代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class NavigateTo {
    private WebDriver driver;

    @BeforeClass
    public void setup() {
        driver = new FirefoxDriver();
    }

    @Test
    public void NavigateToMain() {
        @SuppressWarnings("unused")
        Login login = new Login(driver).get();
    }
}

===================

import static org.testng.AssertJUnit.assertEquals;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.LoadableComponent;

public class Login extends LoadableComponent<Login> {

    private WebDriver driver;

    private By title = By.cssSelector(".anim-btn.green span");

    public Login(WebDriver driver) {
        this.driver = driver;
    }

    @Override
    protected void load() {
        System.out.println("Navigating to Bizzabo home page");
        driver.get("int-www.bizzabo.com");

    }

    @Override
    protected void isLoaded() throws Error {
        assertEquals("Get started", driver.findElement(title).getText());
    }
}

为什么在调用时:'登录登录=新登录(驱动程序).get()'它不首先通过load()方法,而是直接通过'isLoaded()'方法?

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

这只是按设计。是指仅执行加载 一次,从而提高测试效果。

如果您需要强制重新加载,您只需将覆盖的load()函数声明为public(子类中的重写load()函数即可)。然后,万一您可以拨打load()而不是get()

public class Login extends LoadableComponent<Login> {
    ...

    /**
     * Load the web page.
     */
    @Override
    public final void load() {
        driver.get(...);
    }

    ...
}

如果您不希望通过将protected修饰符扩展到public来稍微破坏设计,则可以扩展LoadableComponent类并添加{{1 } public功能:

reload()

答案 1 :(得分:0)

首先需要实现isLoaded函数,当它失败时会自动调用加载函数

相关问题