使用Selenium WebDriver上传文件 - 无法与Dialog窗口C#进行交互

时间:2015-02-11 17:49:10

标签: c# selenium selenium-webdriver webdriver

我尝试使用Selenium WebDriver上传文件。问题是selenium没有将文件路径发送到对话框窗口。我正在使用SendKeys()。这是我的代码:

Click.DsrSubmitNewActivityToolPage.AttachmentButton();
Thread.Sleep(4000);
Actions action = new Actions(PageElements.Driver);
action.SendKeys("C:/Users/gk/Documents/Test/Test Test.docx");
action.SendKeys(Keys.Enter);
Thread.Sleep(4000);

这是HTML:

<div class="activity yui3-g">
   <div class="label yui3-u-1-5">
       <span>Attachment:</span>
   </div>
   <div class="yui3-u-4-5">
       <input id="fileID" type="file" name="file"/>
   </div>
</div>
<div id="pointValueContainer" class="activity yui3-g" style="display:none">
<span class="label">Notes</span>
<div class="activity">
<p>

3 个答案:

答案 0 :(得分:0)

看起来您在驱动程序/ root上执行SendKeys()而不是目标元素。

您需要找到目标文件标记并在其上使用SendKeys()。 EG:

public void Test(string filepath)
{
    By byCss = By.CssSelector("your selector");
    //explicit wait to make sure the element is visible
    new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(byCss));
    Driver.FindElement(byCss).SendKeys(filepath);
}

答案 1 :(得分:0)

如果您尝试与本机文件对话框进行交互,那么Selenium无法实现这一目标。

你可以使用像AutoIT这样的东西来自动化对话但是我强烈反对它;稍后您将遇到跨浏览器和可伸缩性问题。

相反,您可以在与文件上传相关联的位置上执行send_keys。在html中查看,肯定会有一个文件上传控件。

只需使用send_keys插入文件的路径就会导致上传。 您不必使用ActionBiilders

答案 2 :(得分:0)

因此,由于其类型文件,您可以直接执行driver.FindElement(By.Id("fileID")).SendKeys(filepath);

但请记住,在使用Actions类时,您需要调用Build(如果您要进行多项操作,以便将它们组合起来),然后Perform(执行提供的操作)。< / p>

虽然我是 java家伙,但是我在sendkeys方法中看到的如果你提供带有空格的文件路径,它就无法获得文件所以我建议创建一个文件对象,在sendkeys中发送文件absolutePath