无法使用robot类和Sendkeys上传文件

时间:2015-02-08 10:31:09

标签: java selenium selenium-webdriver webdriver

我无法使用机器人类和sendkeys上传文件。

以下是我尝试的代码

package garbage;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class imageupload {

    static WebDriver driver;
    static String baseURL="http://elance.wetwaresoft.com/account/register";


    public static void main(String[] args) throws AWTException, InterruptedException, IOException 
    {
        driver=new FirefoxDriver();
        driver.get(baseURL);
        WebElement btn=driver.findElement(By.xpath("//*[@class='fileupload-new']"));
        btn.click();
        System.out.println("Going in Robot class");
        Runtime.getRuntime().exec("notepad");
        Robot r=new Robot();
        r.delay(1000);
        r.keyPress(KeyEvent.VK_ENTER); 
        r.keyPress(KeyEvent.VK_D);
        r.keyPress(KeyEvent.VK_SHIFT);
        r.keyPress(KeyEvent.VK_SEMICOLON);
        r.keyRelease(KeyEvent.VK_SHIFT);
        r.keyPress(KeyEvent.VK_BACK_SLASH);
        r.keyPress(KeyEvent.VK_A);
        r.keyPress(KeyEvent.VK_DOWN);
        r.keyPress(KeyEvent.VK_ENTER);
        System.out.println("File uploaded");
    }
}

当我在记事本中执行我的机器人类代码时,它会键入路径,但是当我在窗口弹出窗口中执行此操作时,它不会输入任何内容。

如何使用robot和sendkeys上传文件?

1 个答案:

答案 0 :(得分:1)

我使用 Robot 将文件upalod逻辑分离为单独的类,并使方法成为静态。在方法fileAttachmentUsingRobot中将路径传递给您想要上传的图像,即图像的完整系统路径。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;

/**
 * Created by ypolshchykau on 30.01.2015.
 */
public class FileAttacherRobotImplementation {
    public final static Logger log = LoggerFactory.getLogger(FileAttacherRobotImplementation.class);

    /**
     * this method implements file attachment using Robot mechanism
     *
     * @param filePathToImage
     */

    public static void fileAttachmentUsingRobot(String filePathToImage) {
        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        setClipboardData(filePathToImage);
        robot.delay(1000);

        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);
    }

    /**
     * method for copying file in order to attach file in File open window
     *
     * @param str
     */
    public static void setClipboardData(String str) {
        StringSelection stringSelection = new StringSelection(str);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
    }

}

希望这会对你有所帮助。