Внедрить / загрузить локальные изображения в текущую веб-страницу с Selenium 2 - PullRequest
1 голос
/ 23 ноября 2011

У меня есть приложение Selenium Java, которое загружает пользовательский JavaScript с исполнителем JavaScript . Таким же образом я могу загрузить пользовательский CSS на текущую страницу. Но я также хочу иметь возможность загружать пользовательские локальные изображения, на которые есть ссылки в CSS. Это возможно?

1 Ответ

1 голос
/ 25 ноября 2011

Понял сам.Параметры:

  • styleDefinitions - это строка с определениями таблицы стилей CSS.
  • flatImageFolder - это логическое значение.Если это правда, все локальные изображения с относительными 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...