Как извлечь скопированное содержимое из буфера обмена — Selenium безголовый режим

#java #selenium #testing #selenium-webdriver #automation

#java #selenium #тестирование #selenium-webdriver #автоматизация

Вопрос:

У меня есть веб-страница с кнопкой «Копировать ссылку», нажатие на которую копирует некоторые данные из текстового поля. Кроме того, эти тесты selenium будут выполняться на машинах Linux (безголовый режим). Я использовал awt Toolkit api, и он не удался с трассировкой стека ниже, потому что он работает в безголовом режиме Linux. Инструментарий не поддерживается в режиме Linux

 Test Failed: {}[class: tests.AMUSanityTests, method: test, exception: java.awt.HeadlessException, message: 'No X11 DISPLAY variable was set, but this program performed an operation which requires it.', stack trace: 
sun.awt.HeadlessToolkit.getSystemClipboard(HeadlessToolkit.java:309)
  

Я также пытался использовать selenium SendKeys, но это метод void, и поэтому я не могу получить содержимое. На веб-странице нет места, куда я мог бы вставить содержимое и снова скопировать его для проверки.

Мне нужен способ извлечения скопированного содержимого для целей проверки.

Есть ли у кого-нибудь решение о том, как этого можно достичь?

Спасибо.

Ответ №1:

Я написал небольшой класс, который делает это определенным образом:

 public class ClipboardUtil {

    public static String fetchClipboardContents() throws IOException {
        String contents = "";
        String command = "xclip --clipboard -o";
        Process process = Runtime.getRuntime().exec(command);
        try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
            contents = br.readLine();
        }
        return contents;
    }

}
  

Статический метод выполняет команду Linux xclip --clipboard -o , которая выводит содержимое буфера обмена на терминал. Java принимает выходные данные и возвращает их в виде строки.

Вы можете выполнить какую-либо другую команду в Linux, которая даст вам желаемый результат, и код Java должен остаться прежним.

Информация:

Я использовал Ubuntu для написания этого кода. Команда example возвращает скопированное содержимое или текущее выбранное содержимое. Использование другой команды Linux — хорошая идея.

Комментарии:

1. Запуск этой команды Linux выдает следующую ошибку при ошибке терминала: не удается открыть display: (null)

2. Можно найти другую команду, которая выполняет задание, или написать пользовательский сценарий оболочки, если все остальное не удается. Если бы вы могли выводить содержимое буфера обмена на терминал, вы могли бы получить ту же информацию в java.

3. @IvanDimitrov Вы уверены, что это работает в безголовом режиме?

4. @RedYeti Проверьте этот ответ: askubuntu.com/questions/305654/xclip-on-headless-server Это объясняет использование xclip на безголовых серверах. xclip — это утилита, которая работает как буфер обмена терминала, который запускает этот Java-код. Вам все равно нужен x-сервер. Дайте мне знать, если это поможет.

5. @IvanDimitrov Спасибо! Не уверен, что это работает без X-сервера.