我尝试使用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>
答案 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
。