使用C#从OpenFileDialog中选择一个文件

时间:2016-05-30 11:33:13

标签: c# selenium selenium-webdriver openfiledialog

我有一点问题 - 我不知道如何选择文件并在Mozilla OpenFileDialog中打开它。

首先,我按下Selenium的“Browse”打开Dialog,然后我想输入一个文件名(我知道环境变量的确切位置)

在我的情况下:Environment.GetEnvironmentVariable(“Testplatz_Config_Location”)+“\ TestConfig.fpc”

所以我的问题,是否有人知道如何使用C#处理已经打开的OpenFileDialog - 或者是否可以使用Selenium来处理它?<​​/ p>

enter image description here

4 个答案:

答案 0 :(得分:2)

Selenium没有提供任何原生方式来处理基于Windows的弹出窗口。但我们有一些第三方工具,如 AutoIT RobotClass 来处理这些基于Windows的弹出窗口。参考这些并尝试一下。 AutoIT with Selenium and Java

答案 1 :(得分:0)

您可以在文件上传元素上使用sendKeys()来按路径使用selenium上传文件。我建议使用它而不是AutoIT或Robot。

因此,不是单击浏览按钮,而是使用sendKeys()将路径直接发送到文件输入元素。

示例:

IWebElement element = driver.FindElement(By.Id("file_input"));
element.SendKeys(
    Environment.GetEnvironmentVariable("Testplatz_Config_Location") + "\TestConfig.fpc");

答案 2 :(得分:0)

Selenium / SeleniumWebDriver不提供任何本机方式来处理基于Windows的弹出窗口。不过,最好的方法是使用

错过此弹出窗口
IWebElement element = driver.FindElement(By.Id("file_input"));
element.SendKeys(filePath);

但是这不可能总是可能的。如果不是,则可以使用我的lib:

https://github.com/ukushu/DialogCapabilities

通过以下方式:

OpenFileDialog:

// for English Windows
DialogsEn.OpenFileDialog(@"d:\test.txt");

//For windows with russian GUI
Dialogs.OpenFileDialog("Открыть", @"d:\test.txt");

在OpenFileDialog中选择MultiFile:

var filePaths = new string[] {@"d:\test1.txt", @"d:\test2.txt", @"d:\test3.txt"};

//Or for Eng windows:
DialogsEn.OpenFileDialog(filePaths);

//for russian language OS
Dialogs.OpenFileDialog("Открыть", filePaths);

答案 3 :(得分:0)

我将 selenium 与 Java awt 的 Robot 类一起使用。这是我的解决方案

public static void setClipboardData(String string) {
//StringSelection is a class that can be used for copy and paste operations.
        StringSelection stringSelection = new StringSelection(string);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
    }

    public static void uploadFile(String fileLocation) {
        try {
//Setting clipboard with file location
            setClipboardData(fileLocation);
//native key strokes for CTRL, V and ENTER keys
            Robot robot = new Robot();
            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);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
    }