public File takeScreenshot(WebElement element) { if (!WebDriverRunner.hasWebDriverStarted()) { log.warning("Cannot take screenshot because browser is not started"); return null; } WebDriver webdriver = getWebDriver(); if (!(webdriver instanceof TakesScreenshot)) { log.warning("Cannot take screenshot because browser does not support screenshots"); return null; } File screen = ((TakesScreenshot) webdriver).getScreenshotAs(OutputType.FILE); Point p = element.getLocation(); Dimension elementSize = element.getSize(); try { BufferedImage img = ImageIO.read(screen); BufferedImage dest = img.getSubimage(p.getX(), p.getY(), elementSize.getWidth(), elementSize.getHeight()); ImageIO.write(dest, "png", screen); File screenshotOfElement = new File(generateScreenshotFileName()); FileUtils.copyFile(screen, screenshotOfElement); return screenshotOfElement; } catch (IOException e) { printOnce("takeScreenshotImage", e); return null; } }
@JavascriptEnabled @Test public void testShouldCorrectlyIdentifyThatAnElementHasWidthAndHeight() { driver.get(pages.xhtmlTestPage); WebElement shrinko = driver.findElement(By.id("linkId")); Dimension size = shrinko.getSize(); assertTrue("Width expected to be greater than 0", size.width > 0); assertTrue("Height expected to be greater than 0", size.height > 0); }
@JavascriptEnabled @Test public void testShouldNotCrashWhenCallingGetSizeOnAnObsoleteElement() { driver.get(pages.simpleTestPage); WebElement elem = driver.findElement(By.id("links")); driver.get(pages.xhtmlTestPage); try { elem.getSize(); fail(); } catch (StaleElementReferenceException e) { // do nothing. this is what we expected. } }
// TODO: This test's value seems dubious at best. The CSS spec does not define how browsers // should handle sub-pixel rendering, and every browser seems to be different anyhow: // http://ejohn.org/blog/sub-pixel-problems-in-css/ @JavascriptEnabled @Ignore({IE, CHROME, SELENESE, IPHONE, OPERA, ANDROID, SAFARI, OPERA_MOBILE, PHANTOMJS}) // Reason for Chrome: WebKit bug 28804 @Test public void testShouldHandleNonIntegerPositionAndSize() { driver.get(pages.rectanglesPage); WebElement r2 = driver.findElement(By.id("r2")); String left = r2.getCssValue("left"); assertTrue("left (\"" + left + "\") should start with \"10.9\".", left.startsWith("10.9")); String top = r2.getCssValue("top"); assertTrue("top (\"" + top + "\") should start with \"10.1\".", top.startsWith("10.1")); assertEquals(new Point(11, 10), r2.getLocation()); String width = r2.getCssValue("width"); assertTrue("width (\"" + left + "\") should start with \"48.6\".", width.startsWith("48.6")); String height = r2.getCssValue("height"); assertTrue("height (\"" + left + "\") should start with \"49.3\".", height.startsWith("49.3")); assertEquals(r2.getSize(), new Dimension(49, 49)); }
@Test public void checkLocationAndSizeOfBingSearchBox() { WebDriver d = getDriver(); d.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS); d.get("http://www.bing.com"); WebElement searchBox = d.findElement(By.cssSelector("input[name*='q']")); assertTrue( searchBox.getCssValue("color").contains("rgb(0, 0, 0)") || searchBox.getCssValue("color").contains("rgba(0, 0, 0, 1)")); assertEquals("", searchBox.getAttribute("value")); assertEquals("input", searchBox.getTagName()); assertEquals(true, searchBox.isEnabled()); assertEquals(true, searchBox.isDisplayed()); assertTrue(searchBox.getLocation().getX() >= 200); assertTrue(searchBox.getLocation().getY() >= 100); assertTrue(searchBox.getSize().getWidth() >= 350); assertTrue(searchBox.getSize().getHeight() >= 20); }
@Override public Dimension getSize(WebElement element) { return element.getSize(); }
@Override public Dimension getSize() { return webElement.getSize(); }