Java 如何使用Selenium拾取文件“聚焦于文件”对话框

Java 如何使用Selenium拾取文件“聚焦于文件”对话框,java,selenium,selenium-chromedriver,Java,Selenium,Selenium Chromedriver,我想上传一个文件到一个特定的网站,我应该测试。 如何使Selenium集中在“文件”对话框上 当我尝试发送键盘笔划时,笔划将转到站点,而不是“新建文件”对话框 我的代码: Actions builder = new Actions(browser); builder.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE); builder.sendKeys(

我想上传一个文件到一个特定的网站,我应该测试。 如何使Selenium集中在“文件”对话框上

当我尝试发送键盘笔划时,笔划将转到站点,而不是“新建文件”对话框

我的代码:

 Actions builder = new Actions(browser);       
    builder.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE);
    builder.sendKeys(keyBoardText).perform();

上传文件有几种方法。 通常我们上传文件时不点击网站上的上传按钮并打开文件对话框

在Selenium中,您需要在站点页面上找到upload元素并发送本地文件位置

driver.findElement(By.id("Upload Element")).sendKeys("PathToFile");
如果您喜欢打开文件对话框,那么我建议您使用Robot框架

   Robot robot = new Robot();
   robot.keyPress(KeyEvent.VK_ENTER);
   robot.keyRelease(KeyEvent.VK_ENTER);
   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);
但是请记住,当你使用机器人框架时,你需要释放鼠标,因为它会抓住鼠标光标


您可以找到不同的上传文件的方法。

今天,我了解到我只能在单击的Web元素上使用Actions.sendKeys()

如果我只需要点击键盘-我需要使用机器人对象

此代码解决了我的问题:

    softAsserter = new SoftAsserter(testParameters);
    String textToType = testParameters.get("actionData");
    Robot robot = null;
    try {
        robot = new Robot();
        for (char c : textToType.toCharArray()) {
            int keyCode = KeyEvent.getExtendedKeyCodeForChar(c);
            if (KeyEvent.CHAR_UNDEFINED == keyCode) {
                logger.error("Key code not found for character '" + c + "'");
            }
            else {
                try {
                    robot.keyPress(keyCode);
                    robot.delay(10);
                    robot.keyRelease(keyCode);
                    robot.delay(10);
                }
                catch (Exception e) {
                   if (c=='_') {
                       robot.keyPress(KeyEvent.VK_SHIFT);
                       robot.keyPress(KeyEvent.VK_MINUS);
                       robot.keyRelease(KeyEvent.VK_MINUS);
                       robot.keyRelease(KeyEvent.VK_SHIFT);
                   }
                   if (c==':') {
                       robot.keyPress(KeyEvent.VK_SHIFT);
                       robot.keyPress(KeyEvent.VK_SEMICOLON);
                       robot.keyRelease(KeyEvent.VK_SEMICOLON);
                       robot.keyRelease(KeyEvent.VK_SHIFT);
                   }
                }
            }
        }
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyPress(KeyEvent.VK_ENTER);
    }
    catch (Exception ex) {
        logger.error(ex.getMessage());
    }