Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Работа с буфером обмена на удаленной машине


(Alexey) #1

Всем привет,
Столкнулся с такой проблемой:

Необходимо протестировать некий функционал при вставке текста из буфера обмена.
Если бы все гонялось на одной машине, например linux с визуализацией, то никаких проблем бы не возникало, записал бы в буфер так:

public static void setClipboardContents(String aString) {
    StringSelection stringSelection = new StringSelection(aString);
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}

затем вставил в поле при помощи комбинации клавиш Ctrl+V.

Но как быть если тесты запускаются на машине без визуализации с помощью seleniumGrid и через RemoteWebDriver гоняются на другой.

Сталкиваюсь с двумя проблемами:

  1. Для записи в Clipboard требуется дисплей, то есть если нет визуализации, то запись в буфер обмена невозможна.
  2. Допустим визуализация есть и я записал в буфер обмена текст, затем хочу вставить в поле, но браузер то на другой машине, там буфер пустой, опять же задача невыполнима.

С помощью средств вуртуализации, в данном случае стоит openVZ, расшарить буфер между вируалками не получается, не нашел как это настроить=(

Возможно у selenium есть свои средства, ну мало ли. Например, для возможности работы с файлами в таком окружении существует org.openqa.selenium.remote.LocalFileDetector.
Возможно средствами Java можно каким-либо способом передавать clipboard.

Благодарен за помощь=)


(Artur Korobeynyk) #2

Интересно, зачем вам нужен именно буффер обмена. Ну раз так, то может создадите скрипт или мини программу на стороне другой машины, которая будет копировать в буффер обмена текст, который вы в неё отправите. А в тексте теста дергать эту программу от имени того же пользователя, что выполняет тест. По мне, звучит как шаманство, но идея может сработать. Хотя я так и не понимаю, почему бы не запомнить текст в переменную и её записать в поле.

#include "stdio.h"
#include <Windows.h>
 
int CopyBoard(const char *str)
{
    HGLOBAL hglb;
    char *s;
    int ll = strlen(str) + 1;
 
    if (!(hglb = GlobalAlloc(GHND, ll))){
        return 1;
    }
    if (!(s = (char *)GlobalLock(hglb))){
        return 1;
    }
    strcpy(s, str);
    GlobalUnlock(hglb);
    if (!OpenClipboard(NULL) || !EmptyClipboard()) {
        GlobalFree(hglb);
    return 1;
    }
    SetClipboardData(CF_TEXT, hglb);
    CloseClipboard();
    return 0;
}
 
 
void main(){
    char s[]="Hello world";
    printf( "%s\n",s);
 
    CopyBoard(s);
    getchar();
   }

(Alexey) #3

На проекте просто есть кейсы именно с копипастом текста. Спасибо за совет


(Алексей Герасимов) #4

Тема, конечно, старая, но актуальная? На сегодняшний день решение не появилось?
У меня тоже на Ubuntu без виртуализации не удается вставить значение из буфера…видимо, потому что оно в буфер не передается.


(Dmitry Astanin) #5

Ерунда, а не кейс потому что). Как бы “тестируя” копипасту, вы тестируете системные возможности, а не свое приложение. Как то так.


(Алексей Герасимов) #6

При нажатии на кнопку должен скопироваться в буфер URL страницы(не той на которой находишься на данный момент) и я хочу проверить, что копируется то, что нужно. Что же тут ерундового?


(Dmitry Astanin) #7

А поля рядышком со ссылкой нет? Если есть, проверьте корректность линки там и не морочьте себе голову


(Алексей Герасимов) #8

Да я с удовольствием забыл бы об этой проблеме ))) Поясните, пожалуйста, о каком поле речь? Я уж хотел взять текст ссылки из атрибута, но его там не оказалось: