つれづれなるままに。

webテストの自動化について備忘録のつもりで書いています

selenium2 で iPhoneのスクリーンショットを撮る

以前は普通にスクリーンショットをとれていたのですが

selenium2.16.0あたりから撮れないようになってます。

どうも、スクリーンショットをとる関数の返り値の型がかわっているようなのです。

で、比較してみる。


★InternetExplorerDriver.java
public X getScreenshotAs(OutputType target) {
// Get the screenshot as base64.
String base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();

// There's a bug in some versions of IE where images are returned as
// being completely black. We're not sure _why_, but try and work
// around this.
// BufferedImage image = ImageIO.read(new ByteArrayInputStream(
// OutputType.BYTES.convertFromBase64Png(base64)));
// int width = image.getWidth();
// int height = image.getHeight();
// int rgb = new int[width * height];
// image.getRGB(0, 0, width, height, rgb, 0, width);
// boolean allBlack = true;
// for (int i = 0; i < (width * height) && allBlack; i++) {
// allBlack &= rgb[i] == 0;
// }
// if (allBlack) {
// base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();
// }

// ... and convert it.
return target.convertFromBase64Png(base64);
}


★FirefoxDriver.java
public X getScreenshotAs(OutputType target) {
// Get the screenshot as base64.
String base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();
// ... and convert it.
return target.convertFromBase64Png(base64);
}



★AndroidDriver.java
public X getScreenshotAs(OutputType target) throws WebDriverException {
String base64Png = execute(DriverCommand.SCREENSHOT).getValue().toString();
return target.convertFromBase64Png(base64Png);
}



★ChromeDriver.java
public X getScreenshotAs(OutputType target) {
// Get the screenshot as base64.
String base64 = (String) execute(DriverCommand.SCREENSHOT).getValue();
// ... and convert it.
return target.convertFromBase64Png(base64);
}
あれ?これもちょっと違うが、chromeはほかと動作環境も違うので特別?

で、iPhoneは

★IphoneDriver.java
public X getScreenshotAs(OutputType target) {
byte base64Png = (byte[]) execute(DriverCommand.SCREENSHOT).getValue();
String png = new String(base64Png);
// ... and convert it.
return target.convertFromBase64Png(png);
}

微妙に違う・・・・