1
私はJavaScript executorでカスタムJavaScriptを読み込むSelenium Javaアプリケーションを持っています。同じように私は現在のページにカスタムCSSを読み込むことができます。しかし、私はまた、CSSで参照されるカスタムローカルイメージをロードできるようにしたい。それは可能ですか?ローカル画像をSelenium 2で現在のWebページに挿入/ロード
私はJavaScript executorでカスタムJavaScriptを読み込むSelenium Javaアプリケーションを持っています。同じように私は現在のページにカスタムCSSを読み込むことができます。しかし、私はまた、CSSで参照されるカスタムローカルイメージをロードできるようにしたい。それは可能ですか?ローカル画像をSelenium 2で現在のWebページに挿入/ロード
自分で作成しました。パラメータ:
styleDefinitions
は、CSSスタイルシート定義の文字列です。flatImageFolder
はブール値です。 trueの場合、相対URLを持つすべてのローカルイメージはsrc/main/resources/images
フォルダから取得されます。 falseの場合、適切なサブフォルダのフォルダ内に配置する必要があります。Javaコード:
public class SeleniumTools {
public function loadCSS(String styleDefinitions, Boolean flatImageFolder) {
Pattern pattern;
if(flatImageFolder) {
pattern = Pattern.compile("url\\((?:.*?\\/)(.*?).(png|gif)\\)");
} else {
pattern = Pattern.compile("url\\(((?:.*?\\/).*?).(png|gif)\\)");
}
Matcher matcher = pattern.matcher(styleDefinitions);
StringBuffer styleDefinitionsWithInlineImageData = new StringBuffer();
int lastMatchEndPosition = 0;
while(matcher.find()) {
String filename = matcher.group(1);
String extension = matcher.group(2);
lastMatchEndPosition = matcher.end();
matcher.appendReplacement(styleDefinitionsWithInlineImageData, "url(" + convertImageToBinaryData(
SeleniumTools.class.getResourceAsStream("/images/" + filename + "." + extension), extension) + ")");
}
// add all definitions from the last match until the end of the stylesheet
styleDefinitionsWithInlineImageData.append(styleDefinitions.substring(lastMatchEndPosition));
String script = "jQuery('<style type=\"text/css\">" + styleDefinitionsWithInlineImageData.toString() + "</style>').appendTo('html > head');";
((JavascriptExecutor) webDriver).executeScript(script);
}
private static String convertImageToBinaryData(InputStream imageInputStream, String fileExtension) {
BufferedImage image;
try {
image = ImageIO.read(imageInputStream);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, fileExtension, baos);
return "data:image/" + fileExtension + ";base64," + Base64.encode(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
あなたが ' '?ブラウザは、CSSを処理するときに自動的にそれを行うべきです。 –
Webサーバーが動作していないため、URLを使用できません。私は何とか画像をシリアライズしたり、バイナリ形式を使って直接ソースコードに組み込む必要があります。 – Alp