List of usage examples for org.openqa.selenium.remote RemoteWebDriver getWindowHandle
@Override
public String getWindowHandle()
From source file:com.screenslicer.core.scrape.QueryKeyword.java
License:Open Source License
private static void hoverClick(RemoteWebDriver driver, WebElement element) throws ActionFailed { try {/*from w w w . j a v a 2 s .c o m*/ String oldHandle = driver.getWindowHandle(); Actions action = new Actions(driver); Util.click(driver, element); action.moveByOffset(-MOUSE_MOVE_OFFSET, -MOUSE_MOVE_OFFSET).perform(); action.moveToElement(element).perform(); action.moveByOffset(2, 2).perform(); Util.driverSleepShort(); Util.cleanUpNewWindows(driver, oldHandle); } catch (Throwable t) { Log.exception(t); throw new ActionFailed(t); } }
From source file:com.screenslicer.core.scrape.QueryKeyword.java
License:Open Source License
private static String doSearch(RemoteWebDriver driver, List<WebElement> searchBoxes, String searchQuery) throws ActionFailed { try {// w ww. j a v a 2 s .c om for (WebElement element : searchBoxes) { try { Util.click(driver, element); element.clear(); Util.driverSleepVeryShort(); if (!CommonUtil.isEmpty(element.getAttribute("value"))) { element.sendKeys(delete); Util.driverSleepVeryShort(); } element.sendKeys(searchQuery); Util.driverSleepVeryShort(); String beforeSource = driver.getPageSource(); String beforeTitle = driver.getTitle(); String beforeUrl = driver.getCurrentUrl(); String windowHandle = driver.getWindowHandle(); element.sendKeys("\n"); Util.driverSleepLong(); Util.cleanUpNewWindows(driver, windowHandle); String afterSource = driver.getPageSource(); String afterTitle = driver.getTitle(); String afterUrl = driver.getCurrentUrl(); if (!beforeTitle.equals(afterTitle) || !beforeUrl.equals(afterUrl) || Math.abs(beforeSource.length() - afterSource.length()) > MIN_SOURCE_DIFF) { handleIframe(driver); return driver.getPageSource(); } } catch (Throwable t) { Log.exception(t); } } } catch (Throwable t) { Log.exception(t); } throw new ActionFailed(); }
From source file:com.screenslicer.core.scrape.QueryKeyword.java
License:Open Source License
private static void handleIframe(RemoteWebDriver driver) throws ActionFailed { List<WebElement> iframes = null; try {//from w w w. j a v a 2s. c o m iframes = driver.findElementsByTagName("iframe"); } catch (Throwable t) { throw new ActionFailed(t); } try { for (WebElement iframe : iframes) { try { Dimension dim = iframe.getSize(); if (iframe.isDisplayed() && (dim.getHeight() * dim.getWidth()) > MIN_IFRAME_AREA) { String src = iframe.getAttribute("src"); if (!CommonUtil.isEmpty(src) && src.indexOf("://") > -1 && src.indexOf("?") > -1) { String origHandle = null; String origUrl = null; String newHandle = null; try { origHandle = driver.getWindowHandle(); origUrl = driver.getCurrentUrl(); newHandle = Util.newWindow(driver); } catch (Throwable t) { Log.exception(t); throw new ActionFailed(t); } boolean undo = false; try { Util.get(driver, src, true); driver.executeScript( "document.getElementsByTagName('html')[0].style.overflow='scroll';"); Util.driverSleepShort(); if (driver.findElementByTagName("body").getText().length() < MIN_SOURCE_DIFF) { undo = true; } } catch (Throwable t) { Log.exception(t); undo = true; } try { if (undo) { if (origHandle.equals(newHandle)) { if (!driver.getCurrentUrl().equals(origUrl)) { try { driver.navigate().back(); } catch (Throwable t) { Log.exception(t); } } if (!driver.getCurrentUrl().equals(origUrl)) { driver.get(origUrl); } } else { Util.cleanUpNewWindows(driver, origHandle); } } else { Util.cleanUpNewWindows(driver, newHandle); break; } } catch (Throwable t) { Log.exception(t); throw new ActionFailed(t); } } } } catch (Throwable t) { Log.exception(t); continue; } } } catch (Throwable t) { Log.exception(t); throw new ActionFailed(t); } }
From source file:com.screenslicer.core.scrape.Scrape.java
License:Open Source License
private static void fetch(List<Result> results, RemoteWebDriver driver, boolean cached, String runGuid, HtmlNode[] clicks) throws ActionFailed { try {//from w w w. j a v a2 s. co m String origHandle = driver.getWindowHandle(); String origUrl = driver.getCurrentUrl(); String newHandle = null; if (cached) { newHandle = Util.newWindow(driver); } try { for (Result result : results) { if (!isUrlValid(result.url()) && Util.uriScheme.matcher(result.url()).matches()) { continue; } if (ScreenSlicerBatch.isCancelled(runGuid)) { return; } try { Log.info("Fetching URL " + result.url() + ". Cached: " + cached, false); } catch (Throwable t) { Log.exception(t); } try { result.attach(getHelper(driver, result.urlNode(), result.url(), cached, runGuid, clicks)); } catch (Throwable t) { Log.exception(t); } } } catch (Throwable t) { Log.exception(t); } finally { if (cached && origHandle.equals(newHandle)) { Log.exception(new Throwable("Failed opening new window")); Util.get(driver, origUrl, true); } else { Util.cleanUpNewWindows(driver, origHandle); } } } catch (Throwable t) { Log.exception(t); throw new ActionFailed(t); } finally { Util.driverSleepRandLong(); } }
From source file:com.screenslicer.core.scrape.Scrape.java
License:Open Source License
private static String getHelper(final RemoteWebDriver driver, final Node urlNode, final String url, final boolean p_cached, final String runGuid, final HtmlNode[] clicks) { final String urlHash = CommonUtil.isEmpty(url) ? null : Crypto.fastHash(url); final long time = System.currentTimeMillis(); if (urlHash != null) { synchronized (fetchLocalCacheLock) { if (fetchLocalCache.containsKey(urlHash)) { if (time - fetchLocalCache.get(urlHash) < FETCH_LOCAL_CACHE_EXPIRES) { try { return FileUtils.readFileToString(new File("./fetch_local_cache/" + urlHash), "utf-8"); } catch (Throwable t) { Log.exception(t); fetchLocalCache.remove(urlHash); }/*from w w w.ja va2 s. c o m*/ } else { fetchLocalCache.remove(urlHash); } } } } if (!CommonUtil.isEmpty(url)) { final Object resultLock = new Object(); final String initVal; final String[] result; synchronized (resultLock) { initVal = Random.next(); result = new String[] { initVal }; } final AtomicBoolean started = new AtomicBoolean(); Thread thread = new Thread(new Runnable() { @Override public void run() { started.set(true); boolean cached = p_cached; String newHandle = null; String origHandle = null; try { origHandle = driver.getWindowHandle(); String content = null; if (!cached) { try { Util.get(driver, url, urlNode, false); } catch (Throwable t) { if (urlNode != null) { Util.newWindow(driver); } Util.get(driver, url, false); } if (urlNode != null) { newHandle = driver.getWindowHandle(); } Util.doClicks(driver, clicks, null); content = driver.getPageSource(); if (CommonUtil.isEmpty(content)) { cached = true; } } if (cached) { if (ScreenSlicerBatch.isCancelled(runGuid)) { return; } Util.get(driver, toCacheUrl(url), false); content = driver.getPageSource(); } content = Util.clean(content, driver.getCurrentUrl()).outerHtml(); if (WebApp.DEBUG) { try { FileUtils.writeStringToFile(new File("./" + System.currentTimeMillis()), content); } catch (IOException e) { } } //TODO make iframes work // if (!CommonUtil.isEmpty(content)) { // Document doc = Jsoup.parse(content); // Elements docFrames = doc.getElementsByTag("iframe"); // List<WebElement> iframes = driver.findElementsByTagName("iframe"); // int cur = 0; // for (WebElement iframe : iframes) { // try { // driver.switchTo().frame(iframe); // String frameSrc = driver.getPageSource(); // if (!CommonUtil.isEmpty(frameSrc) && cur < docFrames.size()) { // docFrames.get(cur).html( // Util.outerHtml(Jsoup.parse(frameSrc).body().childNodes())); // } // } catch (Throwable t) { // Log.exception(t); // } // ++cur; // } // driver.switchTo().defaultContent(); // content = doc.outerHtml(); // } synchronized (resultLock) { result[0] = content; } } catch (Throwable t) { Log.exception(t); } finally { synchronized (resultLock) { if (initVal.equals(result[0])) { result[0] = null; } } Util.driverSleepRandLong(); if (newHandle != null && origHandle != null) { try { Util.cleanUpNewWindows(driver, origHandle); } catch (Throwable t) { Log.exception(t); } } } } }); thread.start(); try { while (!started.get()) { try { Thread.sleep(WAIT); } catch (Throwable t) { Log.exception(t); } } thread.join(HANG_TIME); synchronized (resultLock) { if (initVal.equals(result[0])) { try { Log.exception(new Exception("Browser is hanging")); forceQuit(); thread.interrupt(); } catch (Throwable t) { Log.exception(t); } throw new ActionFailed(); } else if (urlHash != null && !CommonUtil.isEmpty(result[0]) && result[0].length() > MIN_FETCH_CACHE_PAGE_LEN) { synchronized (fetchLocalCacheLock) { if (fetchLocalCache.size() > MAX_FETCH_LOCAL_CACHE) { try { FileUtils.deleteQuietly(new File("./fetch_local_cache")); FileUtils.forceMkdir(new File("./fetch_local_cache")); } catch (Throwable t) { Log.exception(t); } fetchLocalCache.clear(); } FileUtils.writeStringToFile(new File("./fetch_local_cache/" + urlHash), result[0], "utf-8", false); fetchLocalCache.put(urlHash, time); } } return result[0]; } } catch (Throwable t) { Log.exception(t); } } return null; }
From source file:com.screenslicer.core.util.Util.java
License:Open Source License
public static void get(RemoteWebDriver driver, String url, Node urlNode, boolean retry) throws ActionFailed { boolean exception = true; boolean success = true; String origHandle = null;/*from w w w. ja va2s . c o m*/ try { String source = null; boolean badUrl = true; boolean statusFail = true; if (urlNode != null) { origHandle = driver.getWindowHandle(); } for (int i = 0; i < REFRESH_TRIES && (badUrl || statusFail || exception || CommonUtil.isEmpty(source)); i++) { badUrl = false; statusFail = false; exception = false; source = null; if (WebApp.DEBUG) { System.out.println("getting url..."); } try { driver.getKeyboard().sendKeys(Keys.ESCAPE); } catch (Throwable t) { Log.exception(t); } if (urlNode != null) { try { cleanUpNewWindows(driver, origHandle); } catch (Throwable t) { Log.exception(t); } } try { Util.driverSleepVeryShort(); if (urlNode != null) { try { Util.clickToNewWindow(driver, toElement(driver, urlNode)); Set<String> newHandles = driver.getWindowHandles(); for (String newHandle : newHandles) { if (!origHandle.equals(newHandle)) { driver.switchTo().window(newHandle); break; } } } catch (Throwable t) { exception = true; Log.exception(t); Util.cleanUpNewWindows(driver, origHandle); } } else { driver.get("about:blank"); try { driver.get(url); } catch (TimeoutException e) { Log.exception(e); } } if (!exception) { Util.driverSleepShort(); Util.driverSleepLong(); statusFail = HttpStatus.status(driver, urlNode != null) != 200; driver.switchTo().defaultContent(); source = driver.getPageSource(); try { new URL(driver.getCurrentUrl()); badUrl = false; } catch (Throwable t) { badUrl = true; } } } catch (Throwable t) { Log.exception(t); exception = true; } if ((!retry || i + 1 == REFRESH_TRIES) && (badUrl || statusFail || exception || CommonUtil.isEmpty(source))) { try { driver.getKeyboard().sendKeys(Keys.ESCAPE); Util.driverSleepVeryShort(); } catch (Throwable t) { Log.exception(t); } success = false; if (!retry) { break; } } } if (WebApp.DEBUG) { System.out.println("getting url - done"); } } catch (Throwable t) { Log.exception(t); success = false; } if (!success) { if (urlNode != null && origHandle != null) { try { cleanUpNewWindows(driver, origHandle); } catch (Throwable t) { Log.exception(t); } } throw new ActionFailed(); } }
From source file:com.screenslicer.core.util.Util.java
License:Open Source License
public static String newWindow(RemoteWebDriver driver) throws ActionFailed { try {/*from w w w . j a v a 2 s . c om*/ String origHandle = driver.getWindowHandle(); cleanUpNewWindows(driver, origHandle); try { driver.getKeyboard().sendKeys(Keys.chord(Keys.CONTROL + "n")); } catch (Throwable t) { Log.exception(t); } Util.driverSleepStartup(); Collection<String> handles = new HashSet<String>(driver.getWindowHandles()); handles.remove(origHandle); if (!handles.isEmpty()) { driver.switchTo().window(handles.iterator().next()); } else { driver.executeScript("window.open('');"); Util.driverSleepStartup(); handles = new HashSet<String>(driver.getWindowHandles()); handles.remove(origHandle); if (!handles.isEmpty()) { driver.switchTo().window(handles.iterator().next()); } } return driver.getWindowHandle(); } catch (Throwable t) { Log.exception(t); throw new ActionFailed(t); } }
From source file:com.watchrabbit.crawler.driver.factory.FirefoxWebDriverFactory.java
License:Apache License
@Override public void returnWebDriver(RemoteWebDriver driver) { if (driver != null) { LOGGER.debug("Moving {} driver back to pool", driver.getWindowHandle()); if (drivers.size() > maxWaitingDriverSessions) { LOGGER.debug("Maximum waiting sessions exceeded, quitting driver"); driver.quit();/*from www . j a va 2 s. c o m*/ } else { driver.manage().deleteAllCookies(); drivers.add(driver); } } }