我正在尝试在页面对象模型上使用EventFiringWebDriver。如何实现这一点,因为PageFactory.initElements()方法只接受WebDriver实例而不是EventFiringWebDriver实例。将EventFiringWebDriver强制转换为WebDriver在此处不起作用。
答案 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)
}
}
}
您已经可以看到构造函数可以是一个抽象页面:)