Umang
Umang

Reputation: 11

How to paste the text copied in clipboard through Selenium and Java on MacOS

I want to paste some text in one of the textbox in MACOS. I am trying below code. But Control + v and Command + v both are not working. I have also seen that this is known issue, but not sure if it is resolved or not. https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5919 The code is as below.

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");
}

I have also tried context click, that also does not work. I have validated that copyToClipboard function is working properly. Please suggest me, if there are any work around to this.

Thanks, Umang

Upvotes: 1

Views: 3766

Answers (3)

Bayram Binbir
Bayram Binbir

Reputation: 2217

public String copyFromClipboard() { boolean found = false

String data = ''

int count = 0

while (found == false) {
    count++

    try {
        WebDriver driver = DriverFactory.getWebDriver()

        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()

        data = ((Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor)) as String)

        if (!(data.contains('https'))) {
            found = false
        } else {
            println((('Found the data in the ' + count) + ' try: ') + data)

            return data
            
            found = true

            break
        }
    }
    catch (UnsupportedFlavorException e) {
        println(e)
    } 
    catch (IOException e) {
        println(e)
    } 
}

}

Upvotes: 0

mauryaAjay
mauryaAjay

Reputation: 279

You have to select paste option in pop up which open after right and then click on paste option. enter image description here

You can write code like this.

        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();

For me Paste option is present at 5th position. So I have written sendKeys(Keys.ARROW_DOWN) 5 times. You can write this as per your requirement.

I hope this will work for you.

Upvotes: 1

undetected Selenium
undetected Selenium

Reputation: 193058

As you have mentioned copyToClipboard() function is working properly moving forward to send the character sequence through sendKeys() you can use the following solution:

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);

Upvotes: 0

Related Questions