我正在开发一个selenium WebDriver框架[Java],其中有一个Base类,其他所有类都从这个类扩展而来.此外,我遵循页面对象模型,其中每个页面对应于一个类和方法,其中导航到下一页返回下一页/类的新实例.简而言之,每个UI页面对应于Class
现在每个页面都有一些共同的功能,所以不要把它们放到每个类中,而是避免DRY我把它放在我的Base Page类中
对于前goBack方法是在每个基本上导航到上一页的页面上.
我担心的是我想跟随页面/类之间的链接,因此我不确定什么应该是前goBack的常用方法的返回类型.
请记住,导航到下一页的任何方法都应该返回该页面的新实例.
我认为一个解决方案是实现泛型,但仍在努力.任何人都可以帮助我如何实现这一目标.
public class BasePage {
public WebDriver driver;
public BasePage(WebDriver driver) {
this.driver=driver;
}
public BasePage clickGoBack() throws Exception{
driver.click(goBackButton);
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
BasePage 需要知道链接的实现类型:
/**
* @param <T> The implementing type.
*/
public abstract class BasePage<T extends BasePage<T>> {}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用:
public T clickGoBack() { return (T) this; }
Run Code Online (Sandbox Code Playgroud)
这里的问题是,this它不一定是一个实例,T因此强制转换不安全,例如使用以下类:
public class Page1 extends BasePage<Page2> {}
Run Code Online (Sandbox Code Playgroud)
一个解决方案是询问子类this:
public abstract class BasePage<T extends BasePage<T>> {
protected final WebDriver driver;
public BasePage(WebDriver driver) {
this.driver = driver;
}
public T clickGoBack() throws Exception{
driver.click(goBackButton);
return getThis();
}
protected abstract T getThis();
}
public class HomePage extends BasePage<HomePage> {
public HomePage(WebDriver driver) {
super(driver);
}
@Override
protected HomePage getThis() {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |