selenium webdriver 如何利用selenium-

作者: 七月尾巴_葵花 | 来源:发表于2017-04-14 20:11 被阅读84次

    在自动化测试中常常会用到截图功能。最近用了一下selenium-webdriver的截图功能还算不错,可以截取页面全图,不管页面有多长。

    下面的代码演示了如何使用webdriver进行截图:

    import java.io.File;  
    
    import java.io.IOException;  
    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.firefox.FirefoxDriver;  
    
    public class ShotScreen {  
    
      
    
        /** 
    
         * @author gongjf 
    
         * @throws IOException  
    
         * @throws InterruptedException  
    
         */  
    
        public static void main(String[] args) throws IOException, InterruptedException {  
    
              
    
            System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");    
    
            WebDriver dr = new FirefoxDriver();  
    
            dr.get("http://www.51.com");  
    
                      
    
            //这里等待页面加载完成  
    
            Thread.sleep(5000);  
    
            //下面代码是得到截图并保存在D盘下  
    
            File screenShotFile = ((TakesScreenshot)dr).getScreenshotAs(OutputType.FILE);  
    
            FileUtils.copyFile(screenShotFile, new File("D:/test.png"));}}  
    
     
    

    看了一下OutputType接口和TakesScreenshot接口,吐槽一下,貌似这两个接口不是同一个开发写的或者注释没有更新怎么的。在OutputType里面的注释说:

    
    /**  
    
     * Defines the output type for a screenshot. See org.openqa.selenium.Screenshot for usage and  
    
     * examples.  
    
    ...  
    
    

    然后在那找了半天的org.openqa.selenium.Screenshot 接口,晕,后来想应该是org.openqa.selenium.TakesScreenshot。

    在TakesScreenshot里有如下注释:

    
    /** 
    
     * Capture the screenshot and store it in the specified location. 
    
     * 
    
     * <p>For WebDriver extending TakesScreenshot, this makes a best effort 
    
     * depending on the browser to return the following in order of preference: 
    
     * <ul> 
    
     *   <li>Entire page</li> 
    
     *   <li>Current window</li> 
    
     *   <li>Visible portion of the current frame</li> 
    
     *   <li>The screenshot of the entire display containing the browser</li> 
    
     * </ul> 
    
     * 
    
     * <p><span style="color: #ff0000;">For WebElement extending TakesScreenshot, this makes a best effort 
    
     * depending on the browser to return the following in order of preference: 
    
     *   - The entire content of the HTML element 
    
     *   - The visisble portion of the HTML element</span> 
    
     * 
    
     * @param <X> Return type for getScreenshotAs. 
    
     * @param target target type, @see OutputType 
    
     * @return Object in which is stored information about the screenshot. 
    
     * @throws WebDriverException on failure. 
    
     */  
    

    试了一下截取Webelement最终发现WebElement接口没有实现这个类。搞了半天也只是会了截取页面的全图。截取当前的frame也截取的页面全图。难道这个功能没有完善,好吧,这样说自我安慰一下。

    selenium-webdriver 面向接口编程,找一个需要的功能还真是挺难的。

    相关文章

      网友评论

      本文标题:selenium webdriver 如何利用selenium-

      本文链接:https://www.haomeiwen.com/subject/udbiattx.html