C# Selenium IE 测试上传文件与 dojo 应用程序
C# Selenium IE test upload file with dojo application
我是 selenium 的新手,正在尝试编写一个测试用例来测试我的本地主机 dojo 应用程序中的文件上传。我已经尝试使用 here and here 提到的 Selenium sendkeys 命令,但它没有分配给输入元素,也没有为绑定的 dojo 函数调用事件来处理我的数据。
因此,我找到了一个解决方案 here,它允许我与上传对话框进行交互。但是,我无法提交对话框,因为回车键关闭了它,而不是鼠标单击 "Open" 提交它。下面是我的代码:
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 等程序来帮助解决我的问题。
错误不是由代码引起的,而是由 HTML 引起的。我注意到我在输入标签中缺少我的附加点属性。添加后,测试运行正确。
<input id="tempFile" name="file" type="file" style="display:none" data-dojo-attach-point="fileNode" />
我是 selenium 的新手,正在尝试编写一个测试用例来测试我的本地主机 dojo 应用程序中的文件上传。我已经尝试使用 here and here 提到的 Selenium sendkeys 命令,但它没有分配给输入元素,也没有为绑定的 dojo 函数调用事件来处理我的数据。
因此,我找到了一个解决方案 here,它允许我与上传对话框进行交互。但是,我无法提交对话框,因为回车键关闭了它,而不是鼠标单击 "Open" 提交它。下面是我的代码:
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 等程序来帮助解决我的问题。
错误不是由代码引起的,而是由 HTML 引起的。我注意到我在输入标签中缺少我的附加点属性。添加后,测试运行正确。
<input id="tempFile" name="file" type="file" style="display:none" data-dojo-attach-point="fileNode" />