首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ashot和Selenium从多个URL截取屏幕截图

使用Ashot和Selenium从多个URL截取屏幕截图
EN

Stack Overflow用户
提问于 2019-04-12 02:15:26
回答 2查看 493关注 0票数 0

我正在尝试自动化一个测试用例,其中我必须拍摄存在于不同网站中的特定屏幕的屏幕截图。具体来说,我试图测试一个特定的复选框是对齐的,还是not.Below是我的脚本,我使用Ashot将screenshots.The脚本登录到这三个系统,然后点击我想要点击的链接,但是只有一个来自最后一个网址的屏幕截图与来自每个网址的屏幕截图。请帮我解释一下,我如何迭代的Ashot,以便它将采取每个网站的屏幕截图,而不是它现在正在做什么。基本上,所有的步骤都是迭代的,除了屏幕截图,我希望脚本迭代通过屏幕截图以及。

代码语言:javascript
复制
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.*;

import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;

public class checkboxAlignment {

    String driverPath = "C:\\Users\\xxx\\Desktop\\Work\\chromedriver.exe";
    public WebDriver driver;
    public String expected = null;
    public String actual = null;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching chrome browser");
        System.setProperty("webdriver.chrome.driver", driverPath);
        driver = new ChromeDriver();


    }

    @Test(dataProvider = "URLprovider")
    private void notePrice(String url) throws IOException {
        driver.get(url);
        System.out.println(driver.getCurrentUrl());
        WebElement email = driver.findElement(By.xpath("//input[@id='Email']"));
        WebElement password = driver.findElement(By.xpath("//input[@id='PWD']"));
        WebElement submit = driver.findElement(By.xpath("//button[@type='submit']"));
        email.sendKeys("xxx@xxx.com");
        password.sendKeys("xxx");
        submit.click();
        System.out.println(driver.getTitle());
        driver.manage().window().maximize();
        //click on the  PI tab
        driver.findElement(By.id("IDpi")).click();
       // This doesnot iterate, only one screenshot is taken by Ashot
        Screenshot fpScreenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
        ImageIO.write(fpScreenshot.getImage(),"PNG",new File("C://Users//dir//eclipse-workspace//someDir//screenshots//checkbox.jpg"));

    }

    @DataProvider(name = "URLprovider")
    private Object[][] getURLs() {
        return new Object[][] { { "http://www.someURL.com/A" }, { "http://www.someurl.com/B" },
                { "http://www.someurl.com/C" } };
    }


}
EN

回答 2

Stack Overflow用户

发布于 2019-04-12 02:39:39

您将所有屏幕截图保存在同一个文件checkbox.jpg中。这就是为什么你之前的屏幕截图会被最后一个屏幕截图取代。尝试为每个屏幕截图命名不同的文件。另外,将屏幕截图保存为.png扩展名,因为这是实际的文件类型。

尝试使用此命令保存图像:

代码语言:javascript
复制
ImageIO.write(fpScreenshot.getImage(),"PNG",new File("C://Users//dir//eclipse-workspace//someDir//screenshots//checkbox-"+driver.getCurrentUrl()+".png"));
票数 1
EN

Stack Overflow用户

发布于 2019-12-10 21:45:52

我正在做这样的事情

代码语言:javascript
复制
@Step("Захват страницы для хранилища")
    protected void capturePageToVault(String pageName, String url, int scrollTime) throws IOException {
        open(url);
        expected = capturePage(scrollTime);

        ImageIO.write(expected.getImage(), "png", expectedImg(pageName));

        attach = new FileInputStream(expectedImg(pageName));
        Allure.addAttachment("Exemplar", "image/png", attach, ".png");
        attach.close();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55638864

复制
相关文章

相似问题

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