添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

使用 Android 驱动程序截取屏幕截图时,代码都会出现报错:

java.lang.IllegalArgumentException: Illegal base64 character a
 at java.base/java.util.Base64$Decoder.decode0(Base64.java:746)
	at java.base/java.util.Base64$Decoder.decode(Base64.java:538)
	at java.base/java.util.Base64$Decoder.decode(Base64.java:561)
	at org.openqa.selenium.OutputType$2.convertFromBase64Png(OutputType.java:58)
	at org.openqa.selenium.OutputType$2.convertFromBase64Png(OutputType.java:55)
	at org.openqa.selenium.OutputType$3.convertFromBase64Png(OutputType.java:78)
	at org.openqa.selenium.OutputType$3.convertFromBase64Png(OutputType.java:75)
  • 驱动程序尝试将 png 转换为 base64 时似乎失败了
  • 环境细节:
  • npm 版本 : 8.11.0
  • node 版本 : 16.16.0
  • 运行 Appium 的操作系统:Mac 版本 13.0.1
  • Android 手机版本 : 12.0.0
  • appium server : 1.22.3
  • [jar包] java-client : 8.2.0
  • [jar包] selenium-java : 4.5.3
  • 解决方案:

    使用maven命令行mvn dependency:tree查看对应项目的依赖树,对应Appium java 客户端下使用的selenium的依赖版本为4.5.3。
    这是 Selenium 的问题,Appium java 客户端8.2.0版本应该引用selenium的依赖版本为4.5.0,修改pom文件中对应selenium
    版本号即可解决。
    如果还报错,则直接复制以下pom文件:

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
            <java.version>11</java.version>
            <!-- 使用 Java 11 语言特性 ( -source 11 ) 并且还希望编译后的类与 JVM 11 ( -target 11 )兼容,您可以添加以下两个属性,它们是默认属性插件参数的名称-->
            <maven.compiler.target>11</maven.compiler.target>
            <maven.compiler.source>11</maven.compiler.source>
            <!-- 对应junit Jupiter的版本号;放在这里就不需要在每个依赖里面写版本号,导致对应版本号会冲突-->
            <junit.jupiter.version>5.9.1</junit.jupiter.version>
            <!-- log日志 -->
            <slf4j.version>2.0.3</slf4j.version>
            <logback.version>1.4.3</logback.version>
            <!-- plugins -->
            <maven.compiler.version>3.8.1</maven.compiler.version>
            <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
            <!-- 断言-->
            <hamcrest.version>2.2</hamcrest.version>
            <!--allure报告-->
            <allure.version>2.18.1</allure.version>
            <allure-maven.version>2.10.0</allure-maven.version>
            <allure.cmd.download.url>
                https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline
            </allure.cmd.download.url>
            <aspectj.version>1.9.9.1</aspectj.version>
            <!-- faker -->
            <javafaker.version>1.0.2</javafaker.version>
            <!-- selenium -->
            <selenium.version>4.5.0</selenium.version>
            <!-- appium -->
            <appium.version>8.2.0</appium.version>
            <jackson.version>2.13.1</jackson.version>
            <commonio.version>2.11.0</commonio.version>
        </properties>
        <!--    物料清单 (BOM)-->
        <dependencyManagement>
            <dependencies>
                <!--当使用 Gradle 或 Maven 引用多个 JUnit 工件时,此物料清单 POM 可用于简化依赖项管理。不再需要在添加依赖时设置版本-->
                <dependency>
                    <groupId>org.junit</groupId>
                    <artifactId>junit-bom</artifactId>
                    <version>${junit.jupiter.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--            <dependency>-->
                <!--                <groupId>org.seleniumhq.selenium</groupId>-->
                <!--                <artifactId>selenium-remote-driver</artifactId>-->
                <!--                <version>4.5.0</version>-->
                <!--            </dependency>-->
                <!--            <dependency>-->
                <!--                <groupId>org.seleniumhq.selenium</groupId>-->
                <!--                <artifactId>selenium-api</artifactId>-->
                <!--                <version>4.5.0</version>-->
                <!--            </dependency>-->
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <!--        <dependency>-->
            <!--            <groupId>org.seleniumhq.selenium</groupId>-->
            <!--            <artifactId>selenium-support</artifactId>-->
            <!--            <version>4.5.0</version>-->
            <!--        </dependency>-->
            <!--junit5-->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <!--对应添加的依赖的作用范围-->
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-suite</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
                <scope>test</scope>
            </dependency>
            <!--hamcrest断言-->
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest</artifactId>
                <version>${hamcrest.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-core</artifactId>
                <version>${hamcrest.version}</version>
                <scope>test</scope>
            </dependency>
            <!--faster json解析yaml文件 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.dataformat</groupId>
                <artifactId>jackson-dataformat-yaml</artifactId>
                <version>${jackson.version}</version>
                <scope>compile</scope>
            </dependency>
            <!-- log日志 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <!-- common io-->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commonio.version}</version>
            </dependency>
            <!-- allure-->
            <dependency>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-junit5</artifactId>
                <version>${allure.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectj.version}</version>
                <scope>runtime</scope>
            </dependency>
            <!--  随机测试数据生成库  -->
            <dependency>
                <groupId>com.github.javafaker</groupId>
                <artifactId>javafaker</artifactId>
                <version>${javafaker.version}</version>
            </dependency>
            <!-- selenium-->
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>${selenium.version}</version>
                <scope>compile</scope>
            </dependency>
            <!-- appium -->
            <dependency>
                <groupId>io.appium</groupId>
                <artifactId>java-client</artifactId>
                <version>${appium.version}</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <argLine>
                            -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                        </argLine>
                        <includes>
                            <include>**/*Test</include>
                        </includes>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.junit.jupiter</groupId>
                            <artifactId>junit-jupiter-engine</artifactId>
                            <version>${junit.jupiter.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.junit.vintage</groupId>
                            <artifactId>junit-vintage-engine</artifactId>
                            <version>${junit.jupiter.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven.compiler.version}</version>
                    <configuration>
                        <parameters>true</parameters>
                        <!-- 设置jre版本为 11 -->
                        <source>${maven.compiler.source}</source>
                        <target>${maven.compiler.target}</target>
                        <!-- 设置编码为 UTF-8 -->
                        <encoding>${maven.compiler.encoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>io.qameta.allure</groupId>
                    <artifactId>allure-maven</artifactId>
                    <version>${allure-maven.version}</version>
                    <configuration>
                        <reportVersion>${allure.version}</reportVersion>
                        <allureDownloadUrl>${allure.cmd.download.url}/${allure.version}/allure-commandline-${allure.version}.zip</allureDownloadUrl>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    issue
    

    Appium社区对应该issue描述及其解决方案:
    Appium issue