首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Allure Screenshot - Selenium

Allure Screenshot - Selenium
EN

Stack Overflow用户
提问于 2019-12-26 16:48:07
回答 1查看 516关注 0票数 1

我很难用诱人的方式截图。我已经配置了我的接口,在失败测试的情况下,我调用该函数,该函数的任务是在报告中创建屏幕截图。然而,这是行不通的。不创建屏幕截图。

下面是我的界面:

代码语言:javascript
复制
package Test;

import Test.resources.Base;
import io.qameta.allure.Allure;
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 java.io.ByteArrayInputStream;
import java.io.IOException;

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


    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) {
        // TODO Auto-generated method stub
        //screenshot

        try {
            b.getScreenshot(result.getName());
        } catch (IOException e) {
            e.printStackTrace();
        }

        Object testClass = result.getInstance();
        WebDriver driver = ((Base) testClass).getDriver();
        if(driver instanceof  WebDriver) {
            takeScreenshot(driver);
        }
    }

    @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

    }

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

    }

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

    }


}

下面是我的基类表单,它扩展了我的接口:

代码语言:javascript
复制
package Test.resources;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Listeners;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

public class Base {

    public static WebDriver driver;


    public WebDriver initializeDriver() throws IOException {

        Properties prop = new Properties();
        FileInputStream fis = new FileInputStream(System.getProperty("user.dir") + "\\src\\main\\java\\Test\\resources\\data.properties");
        prop.load(fis);

        Properties propBuykers = new Properties();
        FileInputStream fisBuykers = new FileInputStream(System.getProperty("user.dir") + "\\src\\main\\java\\Test\\resources\\data.propertiesBuykers");
        propBuykers.load(fisBuykers);

        String browserName;

        if(System.getProperty("browser") == null) {
            browserName = "chrome";
        }
        else {
            browserName = System.getProperty("browser");
        }


        //String browserName = prop.getProperty("browser");

        if(browserName.contains("chrome")) {
            System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\ChromeDriver\\chromedriver2.exe");
            ChromeOptions options = new ChromeOptions();


            if(browserName.contains("headless")) {
                options.addArguments("headless");
            }
            driver = new ChromeDriver(options);
        }
        else if(browserName.equals("firefox")) {
            System.setProperty("webdriver.gecko.driver", "C:\\Program Files (x86)\\GeckoDriver\\geckodriver.exe");
            driver = new FirefoxDriver();
        }
        else if(browserName.equals("edge")) {
            System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\MicrosoftWebDriver\\msedgedriver.exe");
            driver = new EdgeDriver();
        }

        else if (browserName.equals("remoteBrowser")) {
            DesiredCapabilities caps = DesiredCapabilities.chrome();
            caps.setCapability("platform", "Windows 10");
            caps.setCapability("version", "66.0");

            RemoteWebDriver driver = new RemoteWebDriver(new URL("g42664-b435-4a95-9b68-f43b51a43134@ondemand.eu-central-1.saucelabs.com:443/wd/hub"), caps);
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            return driver;
        }

        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.manage().window().maximize();

        return driver;
    }

    public void getScreenshot(String result) throws IOException {
        File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(src, new File("C://s//"+result+"screenshot.png"));
    }

    public WebDriver getDriver() {
        return driver;
    }
}

请帮帮我,我哪里做错了。

EN

回答 1

Stack Overflow用户

发布于 2019-12-26 17:12:13

尝试将文件路径设置为C:\\s\\"+result+"screenshot.png"

它应该是向后斜杠而不是向前斜杠。

**注意:-我建议不要使用硬编码路径,而是获取目录路径。

代码语言:javascript
复制
File f = new File("testPictures.txt");
String absolute = f.getAbsolutePath();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59485961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档