倾向不附加到HTML报告

时间:2018-02-05 16:25:15

标签: maven selenium-webdriver testng allure

我正试图将屏幕截图附加到我的诱惑报告中,但是我失败了。

    @Test (priority = 1, description="SS1 Verify the login section")
@Description ("Verify that user mngr116116 can logon to the system")
public void login()
{
    page = new BankingLandingPage();
    System.out.println("Test Case One in " + getClass().getSimpleName()
            + " with Thread Id:- " + Thread.currentThread().getId());
    page.enterUser("mngr116116");
    page.enterPass("ytUhUdA");
    page.submitBtn();
    page.saveImageAttach();


}

Page类中的saveImageAttach代码如下:

    @Attachment
public  byte[] saveImageAttach() {
    try {
        byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
        return screenshot;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return new byte[0];
}

我错过了什么?

附加报告截屏 enter image description here

可能需要注意的是,我的页面类中也有以下方法,它可以处理:

    public void screenShot(String title) throws Exception {
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    String png = ("src/main/resources/screenshot/" + title + ".png");
    FileUtils.copyFile(scrFile, new File(png));
}

所以看起来我正在实施@Attachment

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.framework</groupId>
    <artifactId>framework</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <aspectj.version>1.8.13</aspectj.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.7</version>
        </dependency>


        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.0</version>
        </dependency>

            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>3.5.3</version>
            </dependency>
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-firefox-driver</artifactId>
                <version>3.5.3</version>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.14.2</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-all</artifactId>
                <version>1.3</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-testng</artifactId>
                <version>2.0-BETA21</version>
                <scope>test</scope>
            </dependency>
        </dependencies>

    <build>
        <plugins>
            <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.1</version>
                    <configuration>
                        <properties>
                            <argLine>
                                -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                            </argLine>

                            <!-- those are the two default values, you can probably skip them -->
                            <forkCount>7</forkCount>
                            <reuseForks>true</reuseForks>
                            <!-- that's what made it work -->

                            <parallel>classes</parallel>
                            <threadCount>10</threadCount>
                            <includes>
                                <include>src/test/java/testsuite/*class</include>
                            </includes>
                        </properties>
                    </configuration>
                    <dependencies>
                        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjweaver</artifactId>
                            <version>1.8.10</version>
                        </dependency>
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-testng</artifactId>
                            <version>2.20.1</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>

                    </configuration>
                </plugin>
            </plugins>
        </build>

    <reporting>
        <excludeDefaults>true</excludeDefaults>
        <plugins>
            <plugin>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-maven</artifactId>
                <version>2.8</version>
            </plugin>
        </plugins>
    </reporting>
</project>

添加我的pom以防止任何光线

2 个答案:

答案 0 :(得分:0)

尝试运行以下代码:

@Attachment(value = "screenshot", type = "image/png")
public byte[] saveScreenshotPNG (WebDriver driver) {
    return ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
}

答案 1 :(得分:0)

将屏幕截图保存到screenShot(..)转换文件后的ByteArray文件中。示例(kotlin):

declare @myTable table(
    FilterName varchar(10)
    , FilterOption varchar(10)
)
insert into @myTable values
    ('XX', 'ccc'),('XX', 'ccc'),('XX', 'acc')
    ,('XX', 'bbx'),('XX', 'ccc'),('AA', 'fff'),('AA', 'bbb')
    ,('AA', 'fff'),('AA', 'acd'),('UU', 'uff'),('UU', 'acf')
    ,('UU', 'uff'),('BB', 'bff'),('BB', 'bff'),('BB', 'aff')
    ,('BB', 'aff'),('BB', 'xff'),('BB', 'xff'),('BB', 'aff')

select
    FilterName, FilterOption
from
    @myTable
group by FilterName, FilterOption
order by min(FilterOption) over (partition by FilterName), FilterOption

然后使用@Attachment在ByteArray中返回此屏幕截图。 示例(java):

fun returnScreenshot(screenshotPath: String): ByteArray {
    val screenFile = File(screenshotPath)
    val screenFileInBytes = ByteArray(screenFile.length().toInt())
    val fis = FileInputStream(screenFile)
    fis.read(screenFileInBytes)
    fis.close()

    return screenFileInBytes
}

通过此ReportInterface实现您的测试类并实现screenshotPath()以返回截屏路径。 在测试体或拆解中或测试失败后(使用testRule)调用screenShot(String title)和showCurrentScreenshot()。但请确保showCurrentScreenshot()无论如何都是可运行的。

希望,这有帮助。