forked from SeleniumHQ/selenium
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOutputType.java
More file actions
130 lines (113 loc) · 3.37 KB
/
Copy pathOutputType.java
File metadata and controls
130 lines (113 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Base64;
/**
* Defines the output type for a screenshot.
*
* @see TakesScreenshot
* @param <T> Type for the screenshot output.
*/
public interface OutputType<T> {
/**
* Obtain the screenshot as base64 data.
*/
OutputType<String> BASE64 = new OutputType<String>() {
@Override
public String convertFromBase64Png(String base64Png) {
return base64Png;
}
@Override
public String convertFromPngBytes(byte[] png) {
return Base64.getEncoder().encodeToString(png);
}
public String toString() {
return "OutputType.BASE64";
}
};
/**
* Obtain the screenshot as raw bytes.
*/
OutputType<byte[]> BYTES = new OutputType<byte[]>() {
@Override
public byte[] convertFromBase64Png(String base64Png) {
return Base64.getMimeDecoder().decode(base64Png);
}
@Override
public byte[] convertFromPngBytes(byte[] png) {
return png;
}
public String toString() {
return "OutputType.BYTES";
}
};
/**
* Obtain the screenshot into a temporary file that will be deleted once the JVM exits. It is up
* to users to make a copy of this file.
*/
OutputType<File> FILE = new OutputType<File>() {
@Override
public File convertFromBase64Png(String base64Png) {
return save(BYTES.convertFromBase64Png(base64Png));
}
@Override
public File convertFromPngBytes(byte[] data) {
return save(data);
}
private File save(byte[] data) {
OutputStream stream = null;
try {
File tmpFile = File.createTempFile("screenshot", ".png");
tmpFile.deleteOnExit();
stream = new FileOutputStream(tmpFile);
stream.write(data);
return tmpFile;
} catch (IOException e) {
throw new WebDriverException(e);
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// Nothing sane to do
}
}
}
}
public String toString() {
return "OutputType.FILE";
}
};
/**
* Convert the given base64 png to a requested format.
*
* @param base64Png base64 encoded png.
* @return png encoded into requested format.
*/
T convertFromBase64Png(String base64Png);
/**
* Convert the given png to a requested format.
*
* @param png an array of bytes forming a png file.
* @return png encoded into requested format.
*/
T convertFromPngBytes(byte[] png);
}