Example usage for org.openqa.selenium.remote RemoteWebDriver getWindowHandle

List of usage examples for org.openqa.selenium.remote RemoteWebDriver getWindowHandle

Introduction

In this page you can find the example usage for org.openqa.selenium.remote RemoteWebDriver getWindowHandle.

Prototype

@Override
    public String getWindowHandle() 

Source Link

Usage

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);
        }
    }
}