Appium_Android_Java_Cannot take a photo with ashot

529 Views Asked by At

I've tried to take a screenshot with ashot (just focus on an element), but I got an error like that: java.lang.RuntimeException: org.openqa.selenium.WebDriverException: Method is not implemented (WARNING: The server did not provide any stacktrace information)

This are the info of the dependencies:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.4.0</version>
    </dependency>

    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>5.0.0-BETA6</version>
    </dependency>

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.14.3</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>ru.yandex.qatools.ashot</groupId>
        <artifactId>ashot</artifactId>
        <version>1.5.4</version>
    </dependency>

    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
        <version>1.3</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
    </dependency>

    <dependency>
        <groupId>com.aventstack</groupId>
        <artifactId>extentreports</artifactId>
        <version>3.1.5</version>
        <scope>provided</scope>
    </dependency>`

This is the capture screenshot function

public void capture(String folder, String screenShotName, MobileElement 
mobileElement) throws Exception
    {

        Screenshot screenshot = new AShot().takeScreenshot(driver, mobileElement);
        BufferedImage actualImage = screenshot.getImage();
        String dest = ApplicationConfig.CAPTUREDSCREEN_DIR +
 "\\" + folder + "\\" + screenShotName+  ".png";
        ImageIO.write(actualImage,"PNG",new File(dest));
    }

Please help me.

Thanks!!!!

2

There are 2 best solutions below

2
On

WebDriver Screenshot utility

Takes a screenshot of a WebElement on different platforms (i.e. desktop browsers, iOS Simulator Mobile Safari, Android Emulator Browser) Decorates screenshots Provides flexible screenshot comparison

Source: https://github.com/yandex-qatools/ashot

I think they don't support capture screenshot for MobileElement

0
On

To get BufferedImage I use code from How to capture the screenshot of a specific element rather than entire page using Selenium Webdriver? - it works fine for Appium/Android.

If I need a ru.yandex.qatools.ashot.Screenshot object then I use a consctuctor new Screenshot(bufferedImage).