Selenium webdriver 如何拍摄web和AndroID本机应用程序失败的屏幕截图

Selenium webdriver 如何拍摄web和AndroID本机应用程序失败的屏幕截图,selenium-webdriver,appium-android,allure,Selenium Webdriver,Appium Android,Allure,我的测试套件包含驱动程序、应用程序和web,原因是,我的场景就像在web上启用按钮,然后验证移动应用程序的布局是否可见,我使用诱惑报告作为测试日志,但我面临的问题是,失败在移动测试用例上,但截图用于web,构建这样的框架的最佳实践是什么?如何根据特定的平台故障截屏。 我已经为每个类调用了一个Listener,在我的类中,我有我所有的测试方法 package com.qa.Listner; import io.qameta.allure.Attachment; import org.openqa

我的测试套件包含驱动程序、应用程序和web,原因是,我的场景就像在web上启用按钮,然后验证移动应用程序的布局是否可见,我使用诱惑报告作为测试日志,但我面临的问题是,失败在移动测试用例上,但截图用于web,构建这样的框架的最佳实践是什么?如何根据特定的平台故障截屏。 我已经为每个类调用了一个Listener,在我的类中,我有我所有的测试方法

package com.qa.Listner;

import io.qameta.allure.Attachment;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

import com.aventstack.extentreports.MediaEntityBuilder;
import com.aventstack.extentreports.Status;
import com.qa.mysoultab.Base.BaseConfiguration;


public class ListenersT extends BaseConfiguration implements ITestListener {
    BaseConfiguration b = new BaseConfiguration();

    public void onFinish(ITestContext arg0) {
        // TODO Auto-generated method stub

    }

    public void onStart(ITestContext arg0) {
        // TODO Auto-generated method stub

    }

    public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {
        // TODO Auto-generated method stub

    }

    public void onTestFailure(ITestResult result) {
        WebDriver driver = BaseConfiguration.wd;
        if (driver instanceof WebDriver) {
            takeScreenshot(driver);
            childTest.log(Status.FAIL, MediaEntityBuilder
                    .createScreenCaptureFromBase64String(BaseConfiguration.getScreenshot(result.getName())).build());
        }
    }

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

    public void onTestSkipped(ITestResult arg0) {
        // TODO Auto-generated method stub
        WebDriver driver = BaseConfiguration.wd;
        if (driver instanceof WebDriver) {
            takeScreenshot(driver);
            childTest.log(Status.SKIP, MediaEntityBuilder
                    .createScreenCaptureFromBase64String(BaseConfiguration.getScreenshot(arg0.getName())).build());
        }
    }

    public void onTestStart(ITestResult arg0) {
        // TODO Auto-generated method stub

    }

    public void onTestSuccess(ITestResult arg0) {
        // TODO Auto-generated method stub

    }

}
样本测试用例

import com.Listner.ListenersT;
import com.Base.BaseConfiguration;
import io.qameta.allure.Description;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
import io.qameta.allure.Story;
import org.apache.commons.lang3.StringUtils;
import org.testng.annotations.*;

import java.lang.reflect.Method;

import static org.assertj.core.api.Assertions.assertThat;

@Listeners({ ListenersT.class })
public class testcase extends BaseConfiguration {

    @Test(priority = 1)
    @Severity(SeverityLevel.BLOCKER)
    @Description("Verify changes is reflected.")

    public void tc001(Method method) {
        childTest = parentTest.createNode(StringUtils.capitalize(method.getName()));
        basePage.goToSections(env.webURL() + "/email");
        emailPage.enableButton();
        assertThat(email.isDisplay()).isTrue();
    }

    
    @Test(enabled = true,priority = 2,dependsOnMethods = "tc001")
    @Severity(SeverityLevel.BLOCKER)
    @Description("Verify section is visible on app.")

    public void tc002(Method method) {
        childTest = parentTest.createNode(StringUtils.capitalize(method.getName()));
        
        actTokenVerification.clickAndEnterEmail();
        actTokenVerification.clickOnProceedButton();
        assertThat(emailAct.isDiplayed()).isTrue();
    }



    @BeforeClass(alwaysRun = true)
    public void beforeClass() {
        parentTest = extentReport.createTest(getClass().getSimpleName());
        parentTest.assignCategory("Email");
        System.out.println("========================================================================================");
        System.out.println(getClass().getSimpleName());
        System.out.println("========================================================================================");
    }

    @BeforeMethod(alwaysRun = true)
    public void before(Method method) {
        System.out.println("Test Scenario: " + StringUtils.capitalize(method.getName()).replace("_", " "));
    }

    @AfterMethod(alwaysRun = true)
    public void consoleError(Method method) {
    }

    @AfterClass(alwaysRun = true)
    public void afterClass() {
        extentReport.flush();
    }

}