Skip to content

Screenshots not working: Illegal base64 character a #1783

Closed
@algernon28

Description

@algernon28

The problem

Whenever I try to take screenshots with Android driver, I get this error in my cucumber hook.
java.lang.IllegalArgumentException: Illegal base64 character a
at java.base/java.util.Base64$Decoder.decode0(Base64.java:847)
at java.base/java.util.Base64$Decoder.decode(Base64.java:566)
at java.base/java.util.Base64$Decoder.decode(Base64.java:589)
at org.openqa.selenium.OutputType$2.convertFromBase64Png(OutputType.java:58)
at org.openqa.selenium.OutputType$2.convertFromBase64Png(OutputType.java:55)
at org.openqa.selenium.remote.RemoteWebDriver.getScreenshotAs(RemoteWebDriver.java:335)
at com.watermelon.mobile.hooks.MobileHooks.takeScreenshot(MobileHooks.java:85)
at com.watermelon.mobile.hooks.MobileHooks.screenshot(MobileHooks.java:56)

Might be useful to say that I open the app with a deepLink https://.page.link/tggE

Environment

  • Appium version (or git revision) that exhibits the issue: both 1.22.3 and app 1.22.3-4
  • Last Appium version that did not exhibit the issue (if applicable):
  • Desktop OS/version used to run Appium: Windows 10
  • Node.js version (unless using Appium.app|exe):16.8.0 (but same problem with exe)
  • Npm or Yarn package manager:
  • Mobile platform/version under test: Appium client 8.2.0, selenium-support 4.5.0, testng 7.6.1, cucumber-java 7.8.1, cluecumber-report-plugin 2.9.3
  • Real device or emulator/simulator: emulator Android 12.0 x86_64 "Pixel 4", graphics: automatic, cold-boot. Chrome v. 91
  • Appium CLI or Appium.app|exe: 1.22.3-4

Details

If necessary, describe the problem you have been experiencing in more detail.

Link to Appium logs

https://gist.github.com/algernon28/6e067391b94026e3051abc0779774a3c

Code To Reproduce Issue [ Good To Have ]

Capabilities:
{
"platformName": "Android",
"appium:platformVersion": "12.0",
"appium:automationName": "UiAutomator2",
"appium:deviceName": "emulator-5554",
"appium:deviceOrientation": "portrait",
"appium:avd": "A12",
"appium:newCommandTimeout": "120",
"appium:browserName": "Chrome"
}

the app is installed thru a @before hook
@before(order = 1)
public void startUp() {
InteractsWithApps ad = ((InteractsWithApps) driver);
String appFile = System.getProperty(MobileConstants.OPTION_APPFILE);
String appID = System.getProperty(MobileConstants.OPTION_APPID);
if(driver.getCapabilities().getCapability("app") != null)
return;
if (!ad.isAppInstalled(appID)) {
ad.installApp(Paths.get(appFile).toAbsolutePath().toString());
} else {
ad.removeApp(appID);
ad.installApp(Paths.get(appFile).toAbsolutePath().toString());
}

}

I access the app with this code:
driver.get(deeplink url);
-- Deep link gets opened via Chrome
((AndroidDriver) driver).context("NATIVE_APP");
-- follows test code --

the screenshot is taken after each step
screenshot = driver.getScreenshotAs(OutputType.BYTES);
When debugging, it seems to fail where the driver tries to convert the png to base64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions