如何在页面对象模型中使用EventFiringWebDriver

时间:2016-06-21 10:51:32

标签: selenium selenium-webdriver automation

我正在尝试在页面对象模型上使用EventFiringWebDriver。如何实现这一点,因为PageFactory.initElements()方法只接受WebDriver实例而不是EventFiringWebDriver实例。将EventFiringWebDriver强制转换为WebDriver在此处不起作用。

1 个答案:

答案 0 :(得分:1)

按照原则实现自己的页面对象。你会发现在不同情况下(公司到公司)有很多不同的东西,并且没有“一刀切”的东西。

使用与page factory相同的示例,我会做类似(非常伪代码)的事情:

class Home {
    construct(WebDriver ) {
        this.webdriver = WebDriver
    }

    fillSearch(text) {
        webdriver.findById('x').send_keys(text);

    }

    submit(isValid) {
        if (isValid) {
            return new ResultsPage(this.webdriver);
        } else {
            return self(this.webdriver)
        }
    }
}

根据您正在测试的内容,您可能必须在构造函数中注入“上下文” - 对于具有不同行为的“多态”页面,具体取决于...上下文。

即。第一次“登录”可能会将您带到“旅游”页面,但之后会转到“信息中心”,因此您可能会遇到以下情况:

class Login {
    construct(WebDriver, context ) {
        this.webdriver = WebDriver
    }

    fillUsername(text) {
        webdriver.findById('username').send_keys(text)
    }

    fillPassword(text) {
        webdriver.findById('password').send_keys(text)
    }

    submit(isValid) {
        if (isValid) {
            if (context.isFirstTimeLogin) {
                return new Tutorial(this.webdriver, context)
            } else {
                return new Dashboard(this.webdriver, context)
            }
        } else {
            return self(this.webdriver)
        }
    }
}

您已经可以看到构造函数可以是一个抽象页面:)