我正在使用selenium webdriver,C#。
是否可以使用Firefox选择文件对话框制作工作webdriver? 或者我必须使用像AutoIt这样的东西吗?
答案 0 :(得分:31)
如果您尝试选择要上传的文件,Selenium 2支持HTML文件输入。例如:
<强> HTML 强>
<input type="file" id="uploadhere" />
Selenium Code
IWebElement element = driver.FindElement(By.Id("uploadhere"));
element.SendKeys("C:\\Some_Folder\\MyFile.txt");
基本上你&#34;输入&#34; (使用SendKeys
)文件输入元素的完整文件路径。 Selenium为您处理文件选择对话框。
但是如果你想操纵一个任意的文件选择对话框,那么像Anders说的那样,你必须走出Selenium。
答案 1 :(得分:9)
不,WebDriver无法与对话框交互 - 这是因为对话框是操作系统的域而不是网页。
我认识那些运气很好的人以及.Net提供的Automation API。
另一种选择是完全跳过文件对话框并发出POST或GET,但这需要更高级的网站知识以及如何构建POST / GET。
您可以尝试Webinator,它与Selenium类似,因为它由WebDriver提供支持。它提供了文件对话功能,我用它取得了很大的成功。
答案 2 :(得分:4)
这是使用remotewebdriver的另一个解决方案,它像魔术一样工作,我喜欢它。
这是我的课程:
driver.findElementByLinkText("Upload Files").click();
driver.setLogLevel(Level.ALL);
System.out.println(driver.getCurrentUrl());
WebElement element = driver.findElement(By.xpath("//input[@name='file_1']"));
LocalFileDetector detector = new LocalFileDetector();
//Now, give the file path and see the magic :)
String path = "D://test66T.txt";
File f = detector.getLocalFile(path);
((RemoteWebElement)element).setFileDetector(detector);
element.sendKeys(f.getAbsolutePath());
//now click the button to finish
driver.findElementByXPath("//html/body/div[9]/div[1]/a/span").click();
答案 3 :(得分:1)
.Net有一个库来处理文件上传对话框。它有一个SendKeys类,它有一个方法SendWait(字符串键)。它在活动应用程序上发送给定密钥,并等待处理消息。它不会返回任何值。
答案 4 :(得分:1)
这可以通过以下方式完成,测试并使用Internet Explorer和Chrome驱动程序
var allowsDetection = this.Driver as IAllowsFileDetection;
if (allowsDetection != null)
{
allowsDetection.FileDetector = new LocalFileDetector();
}
Driver.FindElement(By.Id("your-upload-input")).SendKeys(@"C:\PathToYourFile");
参考https://groups.google.com/forum/#!msg/webdriver/KxmRZ8MkM4M/45CT4ID_WjQJ
答案 5 :(得分:0)
另一种方法是使用System.Windows.Forms.SendKeys.SendWait("pathToFile")
。
我用它成功地到处都无法将键发送到@prestomanifeo所描述的元素。
答案 6 :(得分:0)
我用它来解决问题...如果以上所有方法都不起作用
Actions action = new Actions(driver);
action.SendKeys(pObjElement, Keys.Space).Build().Perform();
Thread.Sleep(TimeSpan.FromSeconds(2));
var dialogHWnd = FindWindow(null, "Elegir archivos para cargar"); // Here goes the title of the dialog window
var setFocus = SetForegroundWindow(dialogHWnd);
if (setFocus)
{
Thread.Sleep(TimeSpan.FromSeconds(2));
System.Windows.Forms.SendKeys.SendWait(pFile);
System.Windows.Forms.SendKeys.SendWait("{DOWN}");
System.Windows.Forms.SendKeys.SendWait("{TAB}");
System.Windows.Forms.SendKeys.SendWait("{TAB}");
System.Windows.Forms.SendKeys.SendWait("{ENTER}");
}
Thread.Sleep(TimeSpan.FromSeconds(2));
}
答案 7 :(得分:0)
您要求在文件对话框中使用 AutoIt 。这很容易,您可以使用 C#来实现。
安装nuget软件包AutoItX.Net
使用下面的演示代码
根据需要更改对话框标题字符串
public static void InsertIntoFileDialog(string file, int timeout = 10)
{
int aiDialogHandle = AutoItX.WinWaitActive("Save As", "", timeout); // adjust string as you need
if (aiDialogHandle <= 0)
{
Assert.Fail("Can't find file dialog.");
}
AutoItX.Send(file);
Thread.Sleep(500);
AutoItX.Send("{ENTER}");
Thread.Sleep(500);
}
在与文件对话框相关的Appium / Selenium遇到问题之后,这对我有帮助。
答案 8 :(得分:-1)
如果您要上传文件而不使用WebDriver,我遇到的唯一解决方案是AutoIt。它允许您编写脚本并将其转换为可执行文件,然后您可以在代码中调用它。我在使用ActiveX控件时已成功使用它。