Example usage for org.openqa.selenium WebElement getRect

List of usage examples for org.openqa.selenium WebElement getRect

Introduction

In this page you can find the example usage for org.openqa.selenium WebElement getRect.

Prototype

Rectangle getRect();

Source Link

Usage

From source file:com.induscorp.prime.testing.ui.core.objects.ObjectLocation.java

License:Open Source License

/**
 * Applicable if ObjectLocationType = RELATIVE_TO_REF_OBJ
 * //from   w  w w .  j  av  a 2 s  .c  om
 * @param browser
 * @param leftSideImageOfImageObject
 * @param rightSideImageOfImageObject
 * @return
 */
private Rectangle calculateRectangleOfImgObjUsingRefObj(WebBrowser browser, String leftSideImageOfImageObject,
        String rightSideImageOfImageObject) {
    Rectangle rect = null;
    ImageObject leftSideImgObj = new ImageObject(UIObjectType.leftSideImageOfRectangle, "Left Side Image",
            leftSideImageOfImageObject);
    ImageObjectValidator imgValidator = leftSideImgObj.getValidator(browser, null);
    //imgValidator.getRegion().setAutoWaitTimeout(1);
    List<Match> leftSideImgMatches = imgValidator.findElements(3);

    ImageObject rightSideImgObj = new ImageObject(UIObjectType.rightSideImageOfRectangle, "Right Side Image",
            rightSideImageOfImageObject);
    imgValidator = rightSideImgObj.getValidator(browser, null);
    imgValidator.getRegion().setAutoWaitTimeout(1);
    List<Match> rightSideImgMatches = imgValidator.findElements(0);

    Object refElem = refObject.getValidator(browser, null).findElement(0);
    Rectangle refElemRect = null;
    if (refElem instanceof Match) {
        Match refElemAsImg = (Match) refElem;
        refElemRect = refElemAsImg.getRect();
    } else if (refElem instanceof WebElement) {
        WebElement refElemAsDOM = (WebElement) refElem;
        refElemRect = new Rectangle(refElemAsDOM.getRect().getX(), refElemAsDOM.getRect().getY(),
                refElemAsDOM.getRect().getWidth(), refElemAsDOM.getRect().getHeight());
    }

    Assert.assertNotNull(refElemRect, "Failed to find reference element '" + refObject.getDisplayName() + "'.");

    int refObjX1 = new Double(refElemRect.getX()).intValue();
    int refObjY1 = new Double(refElemRect.getY()).intValue();
    int refObjX2 = new Double(refElemRect.getX() + refElemRect.getWidth()).intValue();
    int refObjY2 = new Double(refElemRect.getY() + refElemRect.getHeight()).intValue();

    int refObjCenterY;
    int refObjXDistanceFromM1;
    int refObjXDistanceFromM2;
    int objectRangeFromRefObject;
    int nearestRightSideMatchX2;
    int leftObjX2;
    Match nearestLeftSideMatch;
    Match nearestRightSideMatch;

    switch (refObjectPosition) {
    case LEFT:
        refObjCenterY = refObjY1 + (refObjY2 - refObjY1) / 2;
        // Find nearest leftSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestLeftSideMatch = null;
        for (Match m1 : leftSideImgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            int m1X2 = m1.getX() + m1.getW();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (m1X2 >= refObjX2)
                    && (m1X2 - refObjX2) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = m1X2 - refObjX2;
                nearestLeftSideMatch = m1;
            }
        }

        Assert.assertNotNull(nearestLeftSideMatch,
                "Failed to find nearest leftSideImage '" + leftSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = refObjX2 + refObjectDistanceInPx;
        Assert.assertTrue(nearestLeftSideMatch.getX() <= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + refObjX2 + ", "
                        + objectRangeFromRefObject + "). Probably you can increase refObjectDistanceInPx ("
                        + refObjectDistanceInPx + ") parameter value.");

        // Find nearest rightSideImage match relative to leftSideImage
        refObjXDistanceFromM2 = 999999999;
        nearestRightSideMatch = null;
        for (Match m2 : rightSideImgMatches) {
            int m2Y2 = m2.getY() + m2.getH();
            if ((refObjCenterY >= m2.getY() && refObjCenterY <= m2Y2)
                    && (m2.getX() >= nearestLeftSideMatch.getX())
                    && (m2.getX() - nearestLeftSideMatch.getX()) < refObjXDistanceFromM2
                    && (m2.getX() > (nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW()))) {
                refObjXDistanceFromM2 = m2.getX() - nearestLeftSideMatch.getX();
                nearestRightSideMatch = m2;
            }
        }

        Assert.assertNotNull(nearestRightSideMatch,
                "Failed to find nearest rightSideImage '" + rightSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        rect = new Rectangle(nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW(),
                nearestLeftSideMatch.getY(), nearestRightSideMatch.getX() - nearestLeftSideMatch.getX(),
                nearestLeftSideMatch.getH());
        break;

    case RIGHT:
        refObjCenterY = refObjY1 + (refObjY2 - refObjY1) / 2;
        // Find nearest rightSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestRightSideMatch = null;
        for (Match m1 : rightSideImgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (refObjX1 >= m1.getX())
                    && (refObjX1 - m1.getX()) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = refObjX1 - m1.getX();
                nearestRightSideMatch = m1;
            }
        }

        Assert.assertNotNull(nearestRightSideMatch,
                "Failed to find nearest rightSideImage '" + rightSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = refObjX1 - refObjectDistanceInPx;
        nearestRightSideMatchX2 = nearestRightSideMatch.getX() + nearestRightSideMatch.getW();
        Assert.assertTrue(nearestRightSideMatchX2 >= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + refObjX1 + ", "
                        + objectRangeFromRefObject + "). Probably you can increase refObjectDistanceInPx ("
                        + refObjectDistanceInPx + ") parameter value.");

        // Find nearest leftSideImage match relative to rightSideImage
        refObjXDistanceFromM2 = 999999999;
        nearestLeftSideMatch = null;
        for (Match m2 : leftSideImgMatches) {
            int m2Y2 = m2.getY() + m2.getH();
            if ((refObjCenterY >= m2.getY() && refObjCenterY <= m2Y2) && (nearestRightSideMatchX2 >= m2.getX())
                    && (nearestRightSideMatchX2 - m2.getX()) < refObjXDistanceFromM2
                    && (nearestRightSideMatchX2 > (m2.getX() + m2.getW()))) {
                refObjXDistanceFromM2 = nearestRightSideMatch.getX() - m2.getX();
                nearestLeftSideMatch = m2;
            }
        }

        Assert.assertNotNull(nearestLeftSideMatch,
                "Failed to find nearest leftSideImage '" + leftSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        rect = new Rectangle(nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW(),
                nearestLeftSideMatch.getY(), nearestRightSideMatch.getX() - nearestLeftSideMatch.getX(),
                nearestLeftSideMatch.getH());
        break;

    case TOP:
        refObjCenterY = refObjY2 + refObjectDistanceInPx;
        leftObjX2 = refObjX1 - leftMarginOfRefObjectInPx;
        // Find nearest leftSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestLeftSideMatch = null;
        for (Match m1 : leftSideImgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (m1.getX() >= leftObjX2)
                    && (m1.getX() - leftObjX2) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = m1.getX() - leftObjX2;
                nearestLeftSideMatch = m1;
            }
        }

        Assert.assertNotNull(nearestLeftSideMatch,
                "Failed to find nearest leftSideImage '" + leftSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = leftObjX2 + new Double(refElemRect.getWidth()).intValue();
        Assert.assertTrue(nearestLeftSideMatch.getX() <= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + leftObjX2 + ", "
                        + objectRangeFromRefObject
                        + "). Probably you can increase refObject size by taking the bigger horizontal snapshot.");

        // Find nearest rightSideImage match relative to leftSideImage
        refObjXDistanceFromM2 = 999999999;
        nearestRightSideMatch = null;
        for (Match m2 : rightSideImgMatches) {
            int m2Y2 = m2.getY() + m2.getH();
            if ((refObjCenterY >= m2.getY() && refObjCenterY <= m2Y2)
                    && (m2.getX() >= nearestLeftSideMatch.getX())
                    && (m2.getX() - nearestLeftSideMatch.getX()) < refObjXDistanceFromM2
                    && (m2.getX() > (nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW()))) {
                refObjXDistanceFromM2 = m2.getX() - nearestLeftSideMatch.getX();
                nearestRightSideMatch = m2;
            }
        }

        Assert.assertNotNull(nearestRightSideMatch,
                "Failed to find nearest rightSideImage '" + rightSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        rect = new Rectangle(nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW(),
                nearestLeftSideMatch.getY(), nearestRightSideMatch.getX() - nearestLeftSideMatch.getX(),
                nearestLeftSideMatch.getH());
        break;

    case BOTTOM:
        refObjCenterY = refObjY1 - refObjectDistanceInPx;
        leftObjX2 = refObjX1 - leftMarginOfRefObjectInPx;
        // Find nearest leftSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestLeftSideMatch = null;
        for (Match m1 : leftSideImgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (m1.getX() >= leftObjX2)
                    && (m1.getX() - leftObjX2) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = m1.getX() - leftObjX2;
                nearestLeftSideMatch = m1;
            }
        }

        Assert.assertNotNull(nearestLeftSideMatch,
                "Failed to find nearest leftSideImage '" + leftSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = leftObjX2 + new Double(refElemRect.getWidth()).intValue();
        Assert.assertTrue(nearestLeftSideMatch.getX() <= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + leftObjX2 + ", "
                        + objectRangeFromRefObject
                        + "). Probably you can increase refObject size by taking the bigger horizontal snapshot.");

        // Find nearest rightSideImage match relative to leftSideImage
        refObjXDistanceFromM2 = 999999999;
        nearestRightSideMatch = null;
        for (Match m2 : rightSideImgMatches) {
            int m2Y2 = m2.getY() + m2.getH();
            if ((refObjCenterY >= m2.getY() && refObjCenterY <= m2Y2)
                    && (m2.getX() >= nearestLeftSideMatch.getX())
                    && (m2.getX() - nearestLeftSideMatch.getX()) < refObjXDistanceFromM2
                    && (m2.getX() > (nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW()))) {
                refObjXDistanceFromM2 = m2.getX() - nearestLeftSideMatch.getX();
                nearestRightSideMatch = m2;
            }
        }

        Assert.assertNotNull(nearestRightSideMatch,
                "Failed to find nearest rightSideImage '" + rightSideImageOfImageObject
                        + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        rect = new Rectangle(nearestLeftSideMatch.getX() + nearestLeftSideMatch.getW(),
                nearestLeftSideMatch.getY(), nearestRightSideMatch.getX() - nearestLeftSideMatch.getX(),
                nearestLeftSideMatch.getH());
        break;
    }

    return rect;
}

From source file:com.induscorp.prime.testing.ui.core.objects.ObjectLocation.java

License:Open Source License

private Rectangle calculateRectangleOfImgObjUsingRefObj(WebBrowser browser, int width, int height) {
    Rectangle rect = null;/*from  www.  ja v  a 2 s  . co m*/

    Object refElem = refObject.getValidator(browser, null).findElement(0);
    Rectangle refElemRect = null;
    if (refElem instanceof Match) {
        Match refElemAsImg = (Match) refElem;
        refElemRect = refElemAsImg.getRect();
    } else if (refElem instanceof WebElement) {
        WebElement refElemAsDOM = (WebElement) refElem;
        refElemRect = new Rectangle(refElemAsDOM.getRect().getX(), refElemAsDOM.getRect().getY(),
                refElemAsDOM.getRect().getWidth(), refElemAsDOM.getRect().getHeight());
    }

    Assert.assertNotNull(refElemRect, "Failed to find reference element '" + refObject.getDisplayName() + "'.");

    int refObjX1 = new Double(refElemRect.getX()).intValue();
    int refObjY1 = new Double(refElemRect.getY()).intValue();
    int refObjX2 = new Double(refElemRect.getX() + refElemRect.getWidth()).intValue();
    int refObjY2 = new Double(refElemRect.getY() + refElemRect.getHeight()).intValue();

    int elemX1, elemY1;

    switch (refObjectPosition) {
    case LEFT:
        elemX1 = refObjX2;
        elemY1 = refObjY1 + refObjectDistanceInPx;

        rect = new Rectangle(elemX1, elemY1, width, height);
        break;

    case RIGHT:
        elemX1 = refObjX1 - width;
        elemY1 = refObjY1 + refObjectDistanceInPx;

        rect = new Rectangle(elemX1, elemY1, width, height);
        break;

    case TOP:
        elemX1 = refObjX1 - leftMarginOfRefObjectInPx;
        elemY1 = refObjY2;

        rect = new Rectangle(elemX1, elemY1, width, height);
        break;

    case BOTTOM:
        elemX1 = refObjX1 - leftMarginOfRefObjectInPx;
        elemY1 = refObjY1 - height;

        rect = new Rectangle(elemX1, elemY1, width, height);
        break;
    }

    return rect;
}

From source file:com.induscorp.prime.testing.ui.core.objects.ObjectLocation.java

License:Open Source License

/**
 * Applicable if ObjectLocationType = RELATIVE_TO_REF_OBJ
 * /* ww  w . j a v a 2  s . c om*/
 * @param browser
 * @param imageObject
 * @return
 */
private Rectangle calculateRectangleOfImgObjUsingRefObj(WebBrowser browser, String imageObject) {
    Rectangle rect = null;
    ImageObject imgObject = new ImageObject(UIObjectType.image, "Image Object", imageObject);
    ImageObjectValidator imgValidator = imgObject.getValidator(browser, null);
    imgValidator.getRegion().setAutoWaitTimeout(1);
    List<Match> imgMatches = imgValidator.findElements(3);

    Object refElem = refObject.getValidator(browser, null).findElement(0);
    Rectangle refElemRect = null;
    if (refElem instanceof Match) {
        Match refElemAsImg = (Match) refElem;
        refElemRect = refElemAsImg.getRect();
    } else if (refElem instanceof WebElement) {
        WebElement refElemAsDOM = (WebElement) refElem;
        refElemRect = new Rectangle(refElemAsDOM.getRect().getX(), refElemAsDOM.getRect().getY(),
                refElemAsDOM.getRect().getWidth(), refElemAsDOM.getRect().getHeight());
    }

    Assert.assertNotNull(refElemRect, "Failed to find reference element '" + refObject.getDisplayName() + "'.");

    int refObjX1 = new Double(refElemRect.getX()).intValue();
    int refObjY1 = new Double(refElemRect.getY()).intValue();
    int refObjX2 = new Double(refElemRect.getX() + refElemRect.getWidth()).intValue();
    int refObjY2 = new Double(refElemRect.getY() + refElemRect.getHeight()).intValue();

    int refObjCenterY;
    int refObjXDistanceFromM1;
    int objectRangeFromRefObject;
    int leftObjX2;
    Match nearestImageMatch;

    switch (refObjectPosition) {
    case LEFT:
        refObjCenterY = refObjY1 + (refObjY2 - refObjY1) / 2;
        // Find nearest leftSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestImageMatch = null;
        for (Match m1 : imgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (m1.getX() >= refObjX2)
                    && (m1.getX() - refObjX2) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = m1.getX() - refObjX2;
                nearestImageMatch = m1;
            }
        }

        Assert.assertNotNull(nearestImageMatch, "Failed to find nearest image '" + imageObject
                + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = refObjX2 + refObjectDistanceInPx;
        Assert.assertTrue(nearestImageMatch.getX() <= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + refObjX2 + ", "
                        + objectRangeFromRefObject + "). Probably you can increase refObjectDistanceInPx ("
                        + refObjectDistanceInPx + ") parameter value.");

        rect = nearestImageMatch.getRect();
        break;

    case RIGHT:
        refObjCenterY = refObjY1 + (refObjY2 - refObjY1) / 2;
        // Find nearest rightSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestImageMatch = null;
        for (Match m1 : imgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (refObjX2 >= m1.getX())
                    && (refObjX2 - m1.getX()) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = refObjX2 - m1.getX();
                nearestImageMatch = m1;
            }
        }

        Assert.assertNotNull(nearestImageMatch, "Failed to find nearest image '" + imageObject
                + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = refObjX1 - refObjectDistanceInPx;
        Assert.assertTrue(nearestImageMatch.getX() >= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + refObjX1 + ", "
                        + objectRangeFromRefObject + "). Probably you can increase refObjectDistanceInPx ("
                        + refObjectDistanceInPx + ") parameter value.");

        rect = nearestImageMatch.getRect();
        break;

    case TOP:
        refObjCenterY = refObjY2 + refObjectDistanceInPx;
        leftObjX2 = refObjX1 - leftMarginOfRefObjectInPx;
        // Find nearest leftSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestImageMatch = null;
        for (Match m1 : imgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (m1.getX() >= leftObjX2)
                    && (m1.getX() - leftObjX2) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = m1.getX() - leftObjX2;
                nearestImageMatch = m1;
            }
        }

        Assert.assertNotNull(nearestImageMatch, "Failed to find nearest leftSideImage '" + imageObject
                + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = leftObjX2 + new Double(refElemRect.getWidth()).intValue();
        Assert.assertTrue(nearestImageMatch.getX() <= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + leftObjX2 + ", "
                        + objectRangeFromRefObject
                        + "). Probably you can increase refObject size by taking the bigger horizontal snapshot.");

        rect = nearestImageMatch.getRect();
        break;

    case BOTTOM:
        refObjCenterY = refObjY1 - refObjectDistanceInPx;
        leftObjX2 = refObjX1 - leftMarginOfRefObjectInPx;
        // Find nearest leftSideImage match relative to ref object
        refObjXDistanceFromM1 = 999999999;
        nearestImageMatch = null;
        for (Match m1 : imgMatches) {
            int m1Y2 = m1.getY() + m1.getH();
            if ((refObjCenterY >= m1.getY() && refObjCenterY <= m1Y2) && (m1.getX() >= leftObjX2)
                    && (m1.getX() - leftObjX2) < refObjXDistanceFromM1) {
                refObjXDistanceFromM1 = m1.getX() - leftObjX2;
                nearestImageMatch = m1;
            }
        }

        Assert.assertNotNull(nearestImageMatch, "Failed to find nearest leftSideImage '" + imageObject
                + "' relative to refernce object '" + refObject.getDisplayName() + "'.");

        objectRangeFromRefObject = leftObjX2 + new Double(refElemRect.getWidth()).intValue();
        Assert.assertTrue(nearestImageMatch.getX() <= objectRangeFromRefObject,
                "Failed to find object within the horizontal range (" + leftObjX2 + ", "
                        + objectRangeFromRefObject
                        + "). Probably you can increase refObject size by taking the bigger horizontal snapshot.");

        rect = nearestImageMatch.getRect();
        break;
    }

    return rect;
}

From source file:com.machinepublishers.jbrowserdriver.diagnostics.Test.java

License:Apache License

private void doTests() {
    JBrowserDriver driver = null;/*from w  w  w  .j  a  va2  s .com*/
    Thread shutdownHook = null;
    try {
        HttpServer.launch(TEST_PORT_HTTP);
        final File cacheDir = Files.createTempDirectory("jbd_test_cache").toFile();
        final File userDataDir = Files.createTempDirectory("jbd_test_userdata").toFile();
        shutdownHook = new Thread(new Runnable() {
            @Override
            public void run() {
                FileUtils.deleteQuietly(cacheDir);
                FileUtils.deleteQuietly(userDataDir);
            }
        });
        Runtime.getRuntime().addShutdownHook(shutdownHook);
        final String mainPage = "http://" + InetAddress.getLoopbackAddress().getHostAddress() + ":"
                + TEST_PORT_HTTP;
        final int ajaxWait = 150;
        final Settings.Builder builder = Settings.builder().processes(TEST_PORTS_RMI)
                .screen(new Dimension(1024, 768)).logger(null).logJavascript(true).ajaxWait(ajaxWait)
                .cacheDir(cacheDir).cache(true).ignoreDialogs(false);
        driver = new JBrowserDriver(builder.build());

        /*
         * Load a page
         */
        driver.get(mainPage);
        test(driver.getStatusCode() == 200);
        long initialRequestId = HttpServer.previousRequestId();

        /*
         * Load page from cache
         */
        driver.get(mainPage);
        test(driver.getStatusCode() == 200);
        test(HttpServer.previousRequestId() == initialRequestId);
        boolean viaHeader = false;
        for (String line : HttpServer.previousRequest()) {
            if (line.toLowerCase().startsWith("via:")) {
                viaHeader = true;
                break;
            }
        }
        test(!viaHeader);

        /*
         * Driver reset
         */
        driver.reset();
        driver.get(mainPage);
        test(driver.getStatusCode() == 200);
        test(HttpServer.previousRequestId() == initialRequestId);
        driver.reset(builder.cacheDir(null).build());
        driver.get(mainPage);
        test(driver.getStatusCode() == 200);
        test(HttpServer.previousRequestId() != initialRequestId);

        /*
         * Javascript logs
         */
        int messages = 0;
        for (LogEntry entry : driver.manage().logs().get("javascript").filter(Level.ALL)) {
            ++messages;
            test(!StringUtils.isEmpty(entry.getMessage()));
        }
        test(messages == 3);

        /*
         * User-data directory
         */
        driver.findElement(By.id("populate-local-storage")).click();
        driver.findElement(By.id("load-from-local-storage")).click();
        test("test-value".equals(driver.findElement(By.id("local-storage-value-holder")).getText()));
        driver.get(mainPage);
        driver.findElement(By.id("load-from-local-storage")).click();
        test("test-value".equals(driver.findElement(By.id("local-storage-value-holder")).getText()));
        driver.reset();
        driver.get(mainPage);
        driver.findElement(By.id("load-from-local-storage")).click();
        test("".equals(driver.findElement(By.id("local-storage-value-holder")).getText()));
        driver.reset(builder.userDataDirectory(userDataDir).build());
        driver.get(mainPage);
        driver.findElement(By.id("populate-local-storage")).click();
        driver.findElement(By.id("load-from-local-storage")).click();
        test("test-value".equals(driver.findElement(By.id("local-storage-value-holder")).getText()));
        driver.reset();
        driver.get(mainPage);
        driver.findElement(By.id("load-from-local-storage")).click();
        test("test-value".equals(driver.findElement(By.id("local-storage-value-holder")).getText()));

        /*
         * Select DOM elements
         */
        test("test-data-attr".equals(driver.findElement(By.id("divtext1")).getAttribute("data-selected")));
        test(driver.findElement(By.id("divtext1")).getAttribute("undefinedattr") == null);
        test(driver.findElement(By.id("divtext1")).getAttribute("innerText").equals("test1"));
        test(driver.findElements(By.name("divs")).size() == 2);
        test(driver.findElements(By.name("divs")).get(1).getAttribute("innerText").equals("test2"));
        test(driver.findElementByClassName("divclass").getAttribute("id").equals("divtext1"));
        test(driver.findElementsByClassName("divclass").get(1).getAttribute("id").equals("divtext2"));
        test(driver.findElementByCssSelector("#divtext1").getAttribute("id").equals("divtext1"));
        test(driver.findElementsByCssSelector("html > *").get(1).getAttribute("id").equals("testbody"));
        test(driver.findElementById("divtext1").getTagName().equals("div"));
        test(driver.findElementsById("divtext1").get(0).getTagName().equals("div"));
        test(driver.findElementByLinkText("anchor").getAttribute("id").equals("anchor1"));
        test(driver.findElementsByLinkText("anchor").get(1).getAttribute("id").equals("anchor2"));
        test(driver.findElementByName("divs").getAttribute("id").equals("divtext1"));
        test(driver.findElementsByName("divs").get(1).getAttribute("id").equals("divtext2"));
        test(driver.findElementByPartialLinkText("anch").getAttribute("id").equals("anchor1"));
        test(driver.findElementsByPartialLinkText("anch").get(1).getAttribute("id").equals("anchor2"));
        test(driver.findElementByTagName("div").getAttribute("id").equals("divtext1"));
        test(driver.findElementsByTagName("div").get(1).getAttribute("id").equals("divtext2"));
        test(driver.findElementByXPath("//*[@id='divtext1']").getAttribute("id").equals("divtext1"));
        test(driver.findElementByTagName("body").findElement(By.xpath("//*[@id='divtext1']")).getAttribute("id")
                .equals("divtext1"));
        test(driver.findElementsByXPath("//html/*").get(1).getAttribute("id").equals("testbody"));
        test(driver.findElement(By.xpath("//a[contains(@href,'1')]")).getAttribute("id").equals("anchor1"));
        test(driver.findElementsByXPath("//a[contains(@href,'!!!')]").isEmpty());
        test(driver.findElementsByClassName("xx").isEmpty());
        test(driver.findElementsByTagName("xx").isEmpty());
        test(driver.findElementsByCssSelector("#xx").isEmpty());
        Throwable error = null;
        try {
            driver.findElementByTagName("xx");
        } catch (NoSuchElementException e) {
            error = e;
        }
        test(error != null);
        error = null;
        try {
            driver.findElementByCssSelector("#xx");
        } catch (NoSuchElementException e) {
            error = e;
        }
        test(error != null);
        error = null;
        try {
            driver.findElementsByXPath("!!!");
        } catch (WebDriverException e) {
            error = e;
        }
        test(error != null);
        error = null;
        try {
            driver.findElement(By.id("divtext1")).findElements(By.cssSelector("???"));
        } catch (WebDriverException e) {
            error = e;
        }
        test(error != null);

        /*
         * WebElement Equals/HashCode
         */
        test(driver.findElements(By.name("divs")).get(0).equals(driver.findElements(By.name("divs")).get(0)));
        test(driver.findElements(By.name("divs")).get(0).hashCode() == driver.findElements(By.name("divs"))
                .get(0).hashCode());

        /*
         * Typing text
         */
        driver.findElement(By.id("text-input")).sendKeys("testing");
        driver.findElement(By.id("text-input")).sendKeys("");
        test(driver.findElement(By.id("text-input")).getAttribute("value").equals("testing"));
        driver.findElement(By.id("text-input")).sendKeys(JBrowserDriver.KEYBOARD_DELETE);
        test(driver.findElement(By.id("text-input")).getAttribute("value") == null);
        driver.findElement(By.id("text-input")).sendKeys("testing");
        test(driver.findElement(By.id("text-input")).getAttribute("value").equals("testing"));
        driver.findElement(By.id("text-input")).clear();
        test(driver.findElement(By.id("text-input")).getAttribute("value") == null);

        /*
         * Clicking on elements
         */
        test(!driver.findElement(By.id("testoption2")).isSelected());
        driver.findElement(By.id("testoption2")).click();
        test(driver.findElement(By.id("testoption2")).isSelected());
        driver.findElement(By.id("testoption1")).click();
        test(driver.findElement(By.id("testoption1")).isSelected());
        driver.findElement(By.id("anchor5")).click();
        test("anchor clicked".equals(driver.findElement(By.id("testspan")).getText()));

        /*
         * Execute javascript
         */
        test(((WebElement) driver.executeScript("return arguments[0];", driver.findElement(By.id("divtext1"))))
                .getAttribute("innerText").equals("test1"));
        test(((WebElement) driver.executeScript("return arguments[0].parentNode;",
                driver.findElement(By.id("divtext1")))).getTagName().equals("body"));
        test(((WebElement) ((JavascriptExecutor) driver.findElement(By.id("divtext1")))
                .executeAsyncScript("arguments[0](this);")).getAttribute("innerText").equals("test1"));
        test((driver.executeAsyncScript("arguments[1](arguments[0].innerText);",
                driver.findElement(By.id("divtext1")))).equals("test1"));
        Map<String, Object> map = (Map<String, Object>) driver.executeScript("return {"
                + "key1:['value1','value2','value3'], " + "key2:5," + "key3:function(){return 'testing';}, "
                + "key4:undefined, key5:null, key6:1/0, key7:0/0, key8:'', key9:[], key10:{}, key11:[{},{}],"
                + "key12:document.getElementById('divtext1'), " + "key13:document.getElementsByName('divs'), "
                + "key14:[document.getElementById('divtext1'),document.getElementsByName('divs'),{subkey1:'subval1'}]};");
        test(map.size() == 14);
        test(((List) map.get("key1")).size() == 3);
        test(((List) map.get("key1")).get(2).equals("value3"));
        test(((List) map.get("key1")).get(2) instanceof String);
        test(map.get("key2").equals(new Long(5)));
        test("function () {return 'testing';}".equals(map.get("key3"))
                || "function (){return 'testing';}".equals(map.get("key3")));
        test(map.get("key4") == null);
        test(map.get("key5") == null);
        test(Double.isInfinite(((Double) map.get("key6")).doubleValue()));
        test(Double.isNaN(((Double) map.get("key7")).doubleValue()));
        test("".equals(map.get("key8")));
        test(map.get("key9") instanceof List);
        test(map.get("key10") instanceof Map);
        test(((List) map.get("key11")).size() == 2);
        test(((Map) ((List) map.get("key11")).get(1)).isEmpty());
        test("test1".equals(((WebElement) map.get("key12")).getAttribute("innerText")));
        test(((List<WebElement>) map.get("key13")).size() == 2);
        test(((List<WebElement>) map.get("key13")).get(1).getAttribute("innerText").equals("test2"));
        test(((List) map.get("key14")).size() == 3);
        test(((List) ((List) map.get("key14")).get(1)).size() == 2);
        test(((WebElement) ((List) ((List) map.get("key14")).get(1)).get(1)).getAttribute("innerText")
                .equals("test2"));
        test(((Map) ((List) map.get("key14")).get(2)).size() == 1);
        test("subval1".equals(((Map) ((List) map.get("key14")).get(2)).get("subkey1")));
        test(((List) driver.executeScript("return [];")).isEmpty());
        test(((Map) driver.executeScript("return {};")).isEmpty());
        error = null;
        try {
            driver.executeScript("invalid.execute()");
        } catch (WebDriverException e) {
            error = e;
        }
        test(error != null);

        /*
         * DOM element properties
         */
        WebElement element = driver.findElement(By.id("divtext1"));
        Point point = element.getLocation();
        test(point.getX() > 0);
        test(point.getY() > 0);
        Dimension dimension = element.getSize();
        test(dimension.width > 0);
        test(dimension.height > 0);
        Rectangle rect = element.getRect();
        test(rect.x == point.getX());
        test(rect.y == point.getY());
        test(rect.width == dimension.getWidth());
        test(rect.height == dimension.getHeight());
        test("Testing\ntext.".equals(driver.findElement(By.id("text-node1")).getText()));
        test("".equals(driver.findElement(By.id("text-node2")).getText()));
        test("".equals(driver.findElement(By.id("text-node3")).getText()));
        List<WebElement> options = driver.findElementsByCssSelector("#testselect option");
        test(options.size() == 2);
        test(options.get(0).isSelected());
        test(!options.get(1).isSelected());
        test(driver.findElementById("checkbox1").isSelected());
        test(!driver.findElementById("checkbox2").isSelected());

        /*
         * Cookie manager
         */
        driver.manage().addCookie(new Cookie("testname", "testvalue"));
        Cookie cookie = driver.manage().getCookieNamed("testname");
        test(cookie.getValue().equals("testvalue"));
        test(InetAddress.getLoopbackAddress().getHostAddress().equals(cookie.getDomain()));

        /*
         * Screenshots
         */
        test(driver.getScreenshotAs(OutputType.BYTES).length > 0);

        /*
         * File Input Type
         */
        driver.findElement(By.id("upload")).sendKeys("some-file");
        test("event-test".equals(driver.findElement(By.id("file-input-onchange")).getText()));
        test(driver.findElement(By.id("upload")).getAttribute("value").endsWith("some-file"));

        /*
         * Javascript alerts
         */
        driver.findElement(By.tagName("button")).click();
        test(driver.switchTo().alert().getText().equals("test-alert"));
        driver.switchTo().alert().dismiss();
        test(driver.switchTo().alert().getText().equals("test-confirm"));
        driver.switchTo().alert().dismiss();
        test(driver.switchTo().alert().getText().equals("test-prompt"));
        driver.switchTo().alert().sendKeys("test-input");
        driver.switchTo().alert().accept();
        test(driver.findElement(By.id("testspan")).getAttribute("innerHTML").equals("test-input"));

        /*
         * Request headers
         */
        List<String> request = HttpServer.previousRequest();
        if (TEST_PORT_HTTP != 443 && TEST_PORT_HTTP != 80) {
            test(request.get(1).endsWith(":" + TEST_PORT_HTTP));
        }
        test(request.size() > 1);
        Set<String> headers = new HashSet<String>();
        for (String line : request) {
            if (line.contains(":")) {
                headers.add(line.split(":")[0].toLowerCase());
            }
        }
        test(request.size() - 2 == headers.size());

        /*
         * HTTP Post
         */
        driver.findElement(By.id("form-submit")).click();
        test(driver.getStatusCode() == 201);
        test("form-field=test-form-value"
                .equals(HttpServer.previousRequest().get(HttpServer.previousRequest().size() - 1)));

        /*
         * Frames
         */
        driver.switchTo().frame(driver.findElementByTagName("iframe"));
        test(driver.findElementById("iframebody") != null);
        driver.switchTo().parentFrame();
        test(driver.findElementById("testbody") != null);
        driver.switchTo().frame(0);
        test(driver.findElementById("iframebody") != null);
        driver.switchTo().defaultContent();
        driver.switchTo().frame("testiframe");
        test(driver.findElementById("iframebody") != null);
        driver.get(mainPage);
        test(driver.getPageSource() != null);
        driver.switchTo().frame(driver.findElementByTagName("iframe"));
        test(driver.findElementById("iframebody") != null);
        driver.switchTo().parentFrame();
        driver.findElement(By.id("anchor3")).click();
        test(driver.getPageSource() != null);
        driver.switchTo().frame(driver.findElementByTagName("iframe"));
        driver.findElement(By.id("iframe-anchor")).click(); //TODO iframe coord offset needed on any other methods?
        driver.pageWait();
        test(HttpServer.previousRequest().get(0).startsWith("GET /iframe.htm?param=fromiframe"));
        driver.get(mainPage);
        driver.switchTo().frame(driver.findElementByTagName("iframe"));
        Actions actions = new Actions(driver);
        actions.moveToElement(driver.findElement(By.id("iframe-anchor")));
        actions.click();
        actions.build().perform();
        driver.pageWait();
        test(HttpServer.previousRequest().get(0).startsWith("GET /iframe.htm?param=fromiframe"));
        driver.get(mainPage);
        driver.switchTo().frame(driver.findElementByTagName("iframe"));
        driver.getMouse().click(((Locatable) driver.findElement(By.id("iframe-anchor"))).getCoordinates());
        driver.getMouse().mouseMove(((Locatable) driver.findElement(By.id("iframe-anchor"))).getCoordinates(),
                5, 5);
        driver.pageWait();
        test(HttpServer.previousRequest().get(0).startsWith("GET /iframe.htm?param=fromiframe"));
        //TODO fingerprinting
        //System.out.println(driver.findElement(By.id("iframe-useragent")).getAttribute("innerHTML"));
        //System.out.println(driver.findElement(By.id("iframe-nested-useragent")).getAttribute("innerHTML"));

        /*
         * Redirects and cookies
         */
        driver.get(mainPage + "/redirect/site1#testfragment");
        test(HttpServer.previousRequestId() != initialRequestId);
        test(driver.getStatusCode() == 200);
        test(driver.getCurrentUrl().endsWith("/redirect/site2#testfragment"));
        cookie = driver.manage().getCookieNamed("JSESSIONID");
        test(cookie.getValue().equals("ABC123"));
        test(InetAddress.getLoopbackAddress().getHostAddress().equals(cookie.getDomain()));

        /*
         * Cookies set by Javascript
         */
        test("jsCookieValue1".equals(driver.manage().getCookieNamed("jsCookieName1").getValue()));
        test("jsCookieValue2".equals(driver.manage().getCookieNamed("jsCookieName2").getValue()));
        test("jsCookieValue3".equals(driver.manage().getCookieNamed("jsCookieName3").getValue()));
        test("jsCookieValue4".equals(driver.manage().getCookieNamed("jsCookieName4").getValue()));

        /*
         * Window size and position
         */
        driver.manage().window().setSize(new Dimension(5000, 5000));
        test(driver.manage().window().getSize().getWidth() == 1024);
        test(driver.manage().window().getSize().getHeight() == 768);
        driver.manage().window().setSize(new Dimension(800, 600));
        test(driver.manage().window().getSize().getWidth() == 800);
        test(driver.manage().window().getSize().getHeight() == 600);
        driver.manage().window().setPosition(new Point(5000, 5000));
        test(driver.manage().window().getPosition().getX() == 224);
        test(driver.manage().window().getPosition().getY() == 168);
        driver.manage().window().setPosition(new Point(20, 50));
        test(driver.manage().window().getPosition().getX() == 20);
        test(driver.manage().window().getPosition().getY() == 50);
        driver.manage().window().maximize();
        test(driver.manage().window().getPosition().getX() == 0);
        test(driver.manage().window().getPosition().getY() == 0);
        test(driver.manage().window().getSize().getWidth() == 1024);
        test(driver.manage().window().getSize().getHeight() == 768);
        driver.manage().window().setSize(new Dimension(800, 600));
        driver.manage().window().setPosition(new Point(20, 50));
        driver.manage().window().fullscreen();
        test(driver.manage().window().getPosition().getX() == 0);
        test(driver.manage().window().getPosition().getY() == 0);
        test(driver.manage().window().getSize().getWidth() == 1024);
        test(driver.manage().window().getSize().getHeight() == 768);
        driver.manage().window().fullscreen();
        test(driver.manage().window().getPosition().getX() == 20);
        test(driver.manage().window().getPosition().getY() == 50);
        test(driver.manage().window().getSize().getWidth() == 800);
        test(driver.manage().window().getSize().getHeight() == 600);
        driver.manage().window().setSize(new Dimension(400, 200));
        driver.manage().window().setPosition(new Point(10, 30));
        test(driver.manage().window().getPosition().getX() == 10);
        test(driver.manage().window().getPosition().getY() == 30);
        test(driver.manage().window().getSize().getWidth() == 400);
        test(driver.manage().window().getSize().getHeight() == 200);
        driver.manage().window().setSize(new Dimension(1024, 768));
        test(driver.manage().window().getPosition().getX() == 0);
        test(driver.manage().window().getPosition().getY() == 0);
        test(driver.manage().window().getSize().getWidth() == 1024);
        test(driver.manage().window().getSize().getHeight() == 768);

        /*
         * Element visibility
         */
        test(driver.findElement(By.id("iframe-anchor")).isDisplayed());
        test(!driver.findElement(By.id("anchor-visibility-hidden")).isDisplayed());
        test(!driver.findElement(By.id("anchor-display-none")).isDisplayed());
        error = null;
        try {
            driver.findElement(By.id("anchor-visibility-hidden")).click();
        } catch (ElementNotVisibleException e) {
            error = e;
        }
        test(error != null);
        error = null;
        try {
            driver.findElement(By.id("anchor-display-none")).click();
        } catch (ElementNotVisibleException e) {
            error = e;
        }
        test(error != null);

        /*
         * Operations on elements that no longer exist
         */
        WebElement body = driver.findElement(By.tagName("body"));
        test(!StringUtils.isEmpty(body.getAttribute("outerHTML")));
        driver.get("about:blank");
        error = null;
        try {
            body.getAttribute("outerHTML");
        } catch (StaleElementReferenceException e) {
            error = e;
        }
        test(error != null);

        /*
         * Timeouts
         */
        driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MILLISECONDS);
        error = null;
        try {
            driver.get(mainPage + "/wait-forever");
        } catch (TimeoutException e) {
            error = e;
        }
        test(error != null);

    } catch (Throwable t) {
        outputError(testLabel("failed", curTest + 1, t));
    } finally {
        try {
            driver.quit();
        } catch (Throwable t) {
            outputError(toString(t));
        }
        try {
            HttpServer.stop();
        } catch (Throwable t) {
            outputError(toString(t));
        }
        try {
            Runtime.getRuntime().removeShutdownHook(shutdownHook);
            shutdownHook.run();
        } catch (Throwable t) {
        }
    }
}

From source file:com.seleniumtests.uipage.htmlelements.CachedHtmlElement.java

License:Apache License

public CachedHtmlElement(WebElement elementToCache) {
    try {//from   w w w . j  a v a  2 s.  c  o m
        rectangle = elementToCache.getRect();
        location = new Point(rectangle.x, rectangle.y);
        size = new Dimension(rectangle.width, rectangle.height);
    } catch (WebDriverException e) {
        location = elementToCache.getLocation();
        size = elementToCache.getSize();
        rectangle = new Rectangle(location, size);
    }

    cachedElement = Jsoup.parseBodyFragment(elementToCache.getAttribute("outerHTML")).body().child(0);
    if ("option".equals(cachedElement.tagName())
            || ("input".equals(cachedElement.tagName())
                    && "checkbox".equals(cachedElement.attributes().getIgnoreCase("type")))
            || ("input".equals(cachedElement.tagName())
                    && "radio".equals(cachedElement.attributes().getIgnoreCase("type")))) {
        selected = elementToCache.isSelected();
    } else {
        selected = false;
    }
    realElement = elementToCache;

}