|
在自动化测试中常常会用到截图功能。最近用了一下selenium-webdriver的截图功能还算不错,可以截取页面全图,不管页面有多长。
下面的代码演示了如何使用webdriver进行截图:
CODE:
- <font size="4">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
- */
- publicstaticvoid 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"));}}</font>
复制代码 看了一下OutputType接口和TakesScreenshot接口,吐槽一下,貌似这两个接口不是同一个开发写的或者注释没有更新怎么的。在OutputType里面的注释说:
CODE:
- <font size="4">/**
- * Defines the output type for a screenshot. See org.openqa.selenium.Screenshot for usage and
- * examples.
- ...</font>
复制代码 然后在那找了半天的org.openqa.selenium.Screenshot 接口,晕,后来想应该是org.openqa.selenium.TakesScreenshot。
在TakesScreenshot里有如下注释:
CODE:
- <font size="4">/**
- * 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: rgb(255, 0, 0);">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.
- */</font>
复制代码 试了一下截取Webelement最终发现WebElement接口没有实现这个类。搞了半天也只是会了截取页面的全图。截取当前的frame也截取的页面全图。难道这个功能没有完善,好吧,这样说自我安慰一下。
selenium-webdriver 面向接口编程,找一个需要的功能还真是挺难的。
|
|