Как вставить текст, скопированный в буфер обмена, через Selenium и Java на MacOS - PullRequest
0 голосов
/ 16 января 2019

Я хочу вставить текст в одно из текстовых полей в MACOS. Я пытаюсь ниже код. Но Control + v и Command + v не работают. Я также видел, что это известная проблема, но не уверен, решена она или нет. https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5919 Код, как показано ниже.

public void copyToClipbord(String copyTo)
{
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    StringSelection str = new StringSelection(copyTo);
   clipboard.setContents(str, null );
}


// And paste into required input/testfield/testarea field object
public void pasteText(WebElement element, String value)
{
    copyToClipbord(value);
    element.click();
    //new Actions( driver ).contextClick( element ).sendKeys( "P" ).sendKeys("\n").perform();
    element.sendKeys(Keys.CONTROL, "V");
}

Я также попробовал щелчок по контексту, который также не работает. Я проверил, что функция copyToClipboard работает правильно. Пожалуйста, предложите мне, если есть какие-то обходные пути.

Спасибо, Umang

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы должны выбрать опцию вставки во всплывающем окне, которое открывается после правой, а затем нажать на опцию вставки. enter image description here

Вы можете написать такой код.

        new Actions(driver ).contextClick(element).sendKeys(Keys.ARROW_DOWN)
   .sendKeys(Keys.ARROW_DOWN)
    .sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).
    sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).perform();

Для меня опция Вставить присутствует на 5-й позиции. Итак, я написал sendKeys (Keys.ARROW_DOWN) 5 раз. Вы можете написать это согласно вашему требованию.

Надеюсь, это сработает для вас.

0 голосов
/ 16 января 2019

Как вы упомянули, copyToClipboard() функция работает правильно продвигаясь вперед, чтобы отправить последовательность символов через sendKeys(), вы можете использовать следующее решение:

import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

copyToClipbord(value);
String data = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor); 
element.sendKeys(data);
...