【问题标题】:SendKeys to a windows file dialog将密钥发送到 Windows 文件对话框
【发布时间】:2017-04-15 00:21:29
【问题描述】:

我想将字符串ABC 发送到Windows 文件对话框的输入字段。使用此代码行,我可以将焦点设置到正确的元素。我看到一个闪烁的光标。

var filedialogOverlay = drv.SwitchTo().ActiveElement();

但是下面的代码并没有将字符串写入元素中。

Thread.Sleep(1000);
filedialogOverlay.SendKeys("ABC");

编辑: 文件上传提示由我要测试的网站显示。由于黑盒测试,我看不到源代码。有分析 GUI 的工具吗?

当我右键单击输入元素时,我会得到以下选择。

【问题讨论】:

  • 如果您的意思是像cumc.columbia.edu/it/howto/remote/img/dnuploadfile25.jpg 这样的文件上传提示,您的代码将不起作用。 drv.SwitchTo().ActiveElement(); 允许切换到您当前关注的元素,例如带有光标的文本输入字段...要上传文件,您需要将文件路径发送到<input type="file">元素
  • ActiveElement() 方法返回页面中的活动元素,而不是文件对话框。 Selenium 不支持文件对话框,但它支持文件上传,方法是直接在 <input type="file"> 元素上调用 Sendkeys 并使用文件的路径。
  • @Florent B. 你能告诉我答案中的完整代码吗?

标签: c# selenium testing dialog sendkeys


【解决方案1】:

你可以使用Windows Form的SendKeys.SendWait

//Input the file path into the filename field:
SendKeys.SendWait(longfilepath);
//Input "Enter" key
SendKeys.SendWait(@"{Enter}");

https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait(v=vs.110).aspx

【讨论】:

  • 抱歉回复晚了,可以参考这个链接:link
【解决方案2】:

如果您需要上传文件,请尝试将文件路径直接发送到相应的输入字段:

drv.FindElement(By.XPath("//input[@type='file']")).SendKeys("ABC");

附:如果页面上有多个文件上传输入字段,您可能需要更具体的XPath,例如"//input[@id='some_specific_file_upload']"...

【讨论】:

  • 但是如何获取输入字段名称呢?我的意思是来自“Windows”的标准对话框覆盖。
  • 要打开文件上传提示你,显然,需要点击按钮,对吧?检查该按钮的HTML,您应该找到提到的<input type="file"> 元素
  • 我没有机会看到代码。我是一名黑盒测试员。有分析 GUI 的工具吗?
  • 您可以通过浏览器查看HTML。使用右键单击所需的网络元素并选择类似inspect element
  • 不要左键单击上传按钮打开文件上传对话框。右键单击页面上的上传按钮
猜你喜欢
  • 2019-11-29
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多