我刚接触Selenium,正在尝试编写一个测试用例来测试本地主机Dojo应用程序中的文件上传。我尝试过使用Selenium sendkeys命令,如前面提到的here和here,但它没有分配给input元素,也没有为数据处理的绑定Dojo函数调用event。
因此,我找到了一个解决方案here,它允许我与上传对话框交互。但是,我无法提交对话框,因为回车键关闭它,而鼠标单击“打开”提交它。
public IWebDriver driver = new InternetExplorerDriver(MY_DRIVER_LOCATION);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
private void UploadFile(string filename)
{
driver.FindElement(By.CssSelector("label.search-btn")).Click(); // Opens the upload file dialog
var dialogHWnd = FindWindow(null, "Choose File to Upload"); // Title for modal. IE: "Choose File to Upload"
var setFocus = SetForegroundWindow(dialogHWnd);
if (setFocus)
{
Thread.Sleep(2000);
SendKeys.SendWait(@"C:\Users\Me\Desktop\TestFile");
SendKeys.SendWait("{DOWN}");
SendKeys.SendWait("{TAB}"); // TAB twice to move focus to "Open" button
SendKeys.SendWait("{TAB}");
SendKeys.SendWait("{ENTER}"); // <--Error here. Closes dialog instead of submits
}
}
用于文件输入的html
<label for="tempFile" class="search-btn" style="padding-top: 6px; padding-bottom: 6px;" data-dojo-attach-point="uploadLabel" >Browse ...</label>
<input id="tempFile" name="file" type="file" style="display:none" />
我如何能够提交带有我为我的测试用例选择的文件的上载表单对话框?
- 注意:由于我的计算机处于托管状态,我无法使用AutoIt等程序来帮助解决问题。*
1条答案
按热度按时间2nc8po8w1#
这个错误不是由代码引起的,而是由HTML引起的。我注意到我在input标记中丢失了attach point属性。一旦添加了它,测试就正确运行了。