使用C#处理Selenium中的Choose file窗口而不使用AutoIT

使用C#处理Selenium中的Choose file窗口而不使用AutoIT,c#,selenium,selenium-webdriver,automation,automated-tests,C#,Selenium,Selenium Webdriver,Automation,Automated Tests,我正在尝试使用selenium将文件上载到网站,当单击Choose file时,它会打开一个本机窗口,因此为此,我一直使用AutoIT,当我进行并行执行时,它似乎不太可靠。 由于我将Selenium与C结合使用,我想找到一些解决方案来处理本机窗口,但我找不到任何解决方案,请任何人告诉我一些可靠的方法来实现这一特定的自动化。有多种方法: IWebElement element = driver.FindElement(By.Id("your_path_to_file_here")); elemen

我正在尝试使用selenium将文件上载到网站,当单击Choose file时,它会打开一个本机窗口,因此为此,我一直使用AutoIT,当我进行并行执行时,它似乎不太可靠。
由于我将Selenium与C结合使用,我想找到一些解决方案来处理本机窗口,但我找不到任何解决方案,请任何人告诉我一些可靠的方法来实现这一特定的自动化。

有多种方法:

IWebElement element = driver.FindElement(By.Id("your_path_to_file_here"));
element.SendKeys("C:\\Some_Folder\\MyFile.txt");
使用
IJavaScriptExecutor

IWebElement element = driver.FindElement(By.Id("your_path_to_file_here"));
string script = "arguments[0].value='" + "C:\\\\temp\\\\file.txt" + "';";
((IJavascriptExecutor)driver).executeScript(script, element);

这两个选项都可以将文本直接插入文件路径
输入
,然后您只需单击上载按钮。

这对我很有效,希望对您也有效。我在这里的扩展方法中使用它,但是您可以在普通方法中使用as/。因此,它使用C#库在对话框中输入路径,完成后按enter键

            string idPath = "C:/text.txt"; //Path to the file you are trying to upload
            var button = driver.FindElement(By.Id("blah"));

            button.Click()
            driver.WaitOnAPage(1); //simple wait method

            SendKeys.SendWait(@idPath); //this code sends the path to the file upload dialog
            CommonMethods.WaitOnAPage(1);//simple wait method

            SendKeys.SendWait(@"{Enter}"); //simulates pressing enter button 

在这种情况下,这将不起作用,因为它是以这样一种方式开发的:当选择文件时,我看不到DOM中的任何更改,也看不到任何地方。取而代之的是,在我选择文件后,文本框只显示文件名,而不显示完整的路径。没有人能够确切地理解你想在这里做什么。如果可能的话,请您详细说明一下您试图在此处处理的窗口。因此,一旦对话框打开并按enter键(而不是单击“确定”按钮),上面的代码将发送文件对话框的路径。我将对它进行编辑,使其更为清晰。非常感谢,先生。这一次做得很好。这里再问一个问题,在并行执行的情况下,这种方法的可行性有多大。是的,它可以工作,因为它不依赖于现有的文件路径以外的任何东西。重要的是要添加,这需要System.Windows.Forms程序集参考