I use Selenium Webdriver a lot, and there are a lot of "utility" methods I've written to make it easier for me to use. I put these classes in a WebDriverUtil
class, and now that file is over 1,200 lines long. Every method in WebDriverUtil
attempts to separate me from using WebDriver
because it's something I use a lot that wouldn't be DRY to keep writing.
For example, this is a method I would put in WebDriverUtil
.
public void waitUntilVisible(final WebElement webElement) {
new WebDriverWait(webDriver, 10).until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver webDriver) {
return webElement.isDisplayed();
}
});
}
If I have 1,200 lines of code full of methods like this, do I have a God object? If so, how could I fix it?
Should I separate my behavior into decorator classes like this?
public class WebElementDecorator implements WebElement {
private WebElement webElement;
private final WebDriver webDriver;
public WebElementDecorator(WebElement webElement, WebDriver webDriver) {
this.webElement = webElement;
this.webDriver = webDriver;
}
public void waitUntilVisible() {
new WebDriverWait(webDriver, 10).until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver webDriver) {
return webElement.isDisplayed();
}
});
}
public void click() {
webElement.click();
}
//... other WebElement methods
}