Browser.java (1660B)
1 package xyz.kebigon.housesearch.browser; 2 3 import java.io.Closeable; 4 import java.io.IOException; 5 import java.util.List; 6 7 import org.openqa.selenium.By; 8 import org.openqa.selenium.NoSuchElementException; 9 import org.openqa.selenium.WebDriver; 10 import org.openqa.selenium.WebElement; 11 import org.openqa.selenium.htmlunit.HtmlUnitDriver; 12 13 import lombok.extern.slf4j.Slf4j; 14 15 @Slf4j 16 public abstract class Browser implements Closeable 17 { 18 private WebDriver driver; 19 20 protected Browser() 21 { 22 driver = new HtmlUnitDriver(); 23 } 24 25 @Override 26 public void close() throws IOException 27 { 28 driver.quit(); 29 } 30 31 protected void navigateTo(String url) 32 { 33 log.info("Navigate to {}", url); 34 driver.navigate().to(url); 35 } 36 37 protected void restartBrowser() 38 { 39 final String url = driver.getCurrentUrl(); 40 log.info("Restarting browser, navigate to {}", url); 41 42 driver.quit(); 43 driver = new HtmlUnitDriver(); 44 driver.navigate().to(url); 45 } 46 47 protected List<WebElement> findElements(String xpathExpression) 48 { 49 return driver.findElements(By.xpath(xpathExpression)); 50 } 51 52 protected boolean click(String xpathExpression) 53 { 54 try 55 { 56 final WebElement element = driver.findElement(By.xpath(xpathExpression)); 57 log.info("Click on {}, navigate to {}", element.getText(), element.getAttribute("href")); 58 element.click(); 59 return true; 60 } 61 catch (final NoSuchElementException e) 62 { 63 log.warn("Unable to click on '{}'", xpathExpression); 64 return false; 65 } 66 } 67 }