Search code examples
javascriptjavaselenium-webdriverbdd

Highlight element does not appear in screenshot?. Please


I'm trying to capture an element with Highlight by screenshot, but in Screenshot this element doesn't appear with Highlight. Anyone know the solution?. The highlight appears when I am capturing the text: automatests@gmail.com

See my code:

Utility.captureScreenShot(driver, "Verifica Nome_Email");
         WebElement taketext1= driver.findElement(By.xpath("//*[@id=\"gb\"]/div[2]/div[3]/div[1]/div[2]/div/a/img"));
         Helper.highLightElement(driver, taketext1);
         driver.findElement(By.xpath("//*[@id=\"gb\"]/div[2]/div[3]/div[1]/div[2]/div/a/img")).click();
         Thread.sleep(2000);
         WebElement taketext= driver.findElement(By.className("gb_tb"));
         Helper.highLightElement(driver, taketext);
         Thread.sleep(2000);
         Utility.captureScreenShot(driver, "Verifica Nome_Email");
         String emailatual = taketext.getText();
         assertTrue(emailatual.contains("automatests@gmail.com")); 
         driver.findElement(By.id("gb_71")).click();
         driver.close();

method public class Helper {

public static void highLightElement(WebDriver driver, WebElement element)
{
JavascriptExecutor js=(JavascriptExecutor)driver; 
 
//js.executeScript("arguments[0].setAttribute('style', 'background: transparent; border: 2px solid red;');", element);
 js.executeScript("arguments[0].style.border='2px solid red'", element);
try 
{
Thread.sleep(1000);
} 
catch (InterruptedException e) {
 
System.out.println(e.getMessage());
} 
 
js.executeScript("arguments[0].setAttribute('style','border: solid 2px white');", element); 
 
}
 

} enter image description here


Solution

  • I have used the Robot class in java.awt package to capture screenshot. You can replace your highLightElement method with following code:

    public static void highlightAndCapture(WebDriver driver, WebElement elem)
                throws IOException, HeadlessException, AWTException {
            if (driver instanceof JavascriptExecutor) {
                // To highlight the element
                ((JavascriptExecutor) driver).executeScript("arguments[0].style.border='2px solid red'", elem);
                // To capture screenshot
                BufferedImage image = new Robot()
                        .createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
                ImageIO.write(image, "png", new File("screenshot.png"));
                // To remove border from highlighted element(Optional)
                ((JavascriptExecutor) driver).executeScript("arguments[0].style.border = \"none\";", elem);
            }
        }