2016年3月7日,星期一

如何在Appium中截屏?



在任何android自动化工具中,捕获屏幕截图都是非常重要的部分。在任何android测试服中,如果您在测试失败期间进行了屏幕截图,则可以非常有效地识别并捕获缺陷。您可以与开发人员共享相同的屏幕截图以报告您的错误。在运行自动化工具时拍摄屏幕快照可以为测试人员节省大量时间。在这篇文章中,我们将学习如何为appium测试用例失败拍摄屏幕截图。

看看我为在appium测试用例失败中获取屏幕截图而准备的简单示例。首先创建一个方法 captureScreenShot() 通过这种方法,您可以决定如何命名目录并 .png 每个屏幕截图的文件。您可以使用日期或测试用例名称来唯一命名您的名称 .png 文件。

在下面的测试案例中,我们将屏幕截图存储在 文件夹/目录 命名为 屏幕截图。我将向您展示两种使用以下方法存储屏幕快照的方法 当前日期,其次使用您选择的任何名称。

影片教学-

 

第一种方法
1.使用Web驱动程序给定的界面拍摄画面”。
2.使用获取当前日期和时间 日期格式 类。
3.然后将其存储在屏幕快照文件夹中,并将其名称设置为当前日期和时间。


public void CaptureScreenShot
{
    鸦片Driver driver;
    String folder_name;
    日期格式 df;
   @Before
    public void testCaseSetup()throws  Exception
    {

        DesiredCapabilities cap=new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android device");
        cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "4000");
        cap.setCapability(MobileCapabilityType.APP, "c://apks//seekbarsample.apk");
        cap.setCapability("noReset", true);
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);

    }
    @Test
    public void testSeekBar()throws  Exception
    {
           //Locating seekbar using resource id
            WebElement seek_bar=driver.findElement(By.id("seek_bar"));
            // get start co-ordinate of seekbar
            int start=seek_bar.getLocation().getX();
            //Get width of seekbar
            int end=seek_bar.getSize().getWidth();
            //get location of seekbar vertically
            int y=seek_bar.getLocation().getY();

        // Select till which position you want to move the seekbar
        TouchAction action=new TouchAction(driver);

        //Move it will the end
        action.press(start,y).moveTo(end,y).release().perform();

        //Move it 40%
        int moveTo=(int)(end*0.4);
        action.press(start,y).moveTo(moveTo,y).release().perform();
        
        captureScreenShots();
    }
    public void captureScreenShots() throws IOException {
        folder_name="屏幕截图";
        File f=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //Date format fot 屏幕截图 file name
        df=new  SimpleDateFormat("dd-MMM-yyyy__hh_mm_ssaa");
        //create dir with given folder name
        new File(folder_name).mkdir();
        //Setting file name
        String file_name=df.format(new Date())+”。 png";
        //coppy 屏幕截图 file into 屏幕截图 folder.
        FileUtils.copyFile(f, new File(folder_name + "/" + file_name));
    }
    @After
    public void testCaseTearDown()
    {
        driver.quit();
    }
}

第二种方法
1.使用Web驱动程序给定的界面拍摄画面”。
2.从调用testScreenShot()方法的测试用例中获取名称。
3. 然后将其存储在屏幕快照文件夹中,并将其名称设置为测试用例通过的字符串。


public void CaptureScreenShot
{
    鸦片Driver driver;
    String folder_name;
    日期格式 df; 
    @Before
    public void testCaseSetup()throws  Exception
    {

        DesiredCapabilities cap=new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android device");
        cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "4000");
        cap.setCapability(MobileCapabilityType.APP, "c://apks//seekbarsample.apk");
        cap.setCapability("noReset", true);
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);

    }
    @Test
    public void testSeekBar()throws  Exception
    {
           //Locating seekbar using resource id
            WebElement seek_bar=driver.findElement(By.id("seek_bar"));
            // get start co-ordinate of seekbar
            int start=seek_bar.getLocation().getX();
            //Get width of seekbar
            int end=seek_bar.getSize().getWidth();
            //get location of seekbar vertically
            int y=seek_bar.getLocation().getY();

        // Select till which position you want to move the seekbar
        TouchAction action=new TouchAction(driver);

        //Move it will the end
        action.press(start,y).moveTo(end,y).release().perform();

        //Move it 40%
        int moveTo=(int)(end*0.4);
        action.press(start,y).moveTo(moveTo,y).release().perform();
        
                captureScreenShots("Seekbar");
    }
   public void captureScreenShots(String file_name) throws IOException {
        folder_name="屏幕截图";
        File f=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //create dir with given folder name
        new File(folder_name).mkdir();
        //Setting file name
        file_name=df.format(new Date())+”。 png";
        //coppy 屏幕截图 file into 屏幕截图 folder.
        FileUtils.copyFile(f,new File(folder_name + "/" + file_name));
    }
    @After
    public void testCaseTearDown()
    {
        driver.quit();
    }
}
我希望本教程将帮助您在Appium测试用例中拍摄屏幕截图。

通过本教程,您可以编写测试代码,以在Appium测试用例失败时获取屏幕截图,并获取用于验证UI的屏幕截图 在多个设备上。

希望本教程对您有所帮助。分享您的反馈意见并 以下评论部分中的问题。请按照社交媒体上的“质量检查自动化”操作, 获取最新的帖子更新。测试愉快:-)

8条评论:

  1. 太神奇了,非常感谢我的朋友,当我被扔进硒中时,我的坐姿也像你的横幅一样。
    当我开始学习时,我知道它有很多很棒的东西。
    我可以证明webdriver已证明是Selenium框架中的最佳功能。
    非常感谢您抽出宝贵时间分享精彩的文章。
    钦奈硒培训学院

    回复删除
  2. 嘿!
    您是否测试了方法`captureScreenShots(String file_name)`? :)
    通过代码df.format(new Date())+擦除“ file_name”变量".png"`

    回复删除
  3. 正是我所需要的
    太好了,非常感谢。

    回复删除
  4. 有用的帖子。感谢您分享该翔实的帖子。 库存审核 | 固定资产审计 | CFA审核

    回复删除
  5. 哇.....这些信息对我真的很有帮助。非常感谢您分享如此有用的帖子..... 重复付款审核
    持续监控
    发票审核重复

    回复删除
  6. 有没有办法拍摄整个页面的截图?

    回复删除