Selenium测试停止在文件选择表单上执行

本文关键字:选择 表单 执行 文件 测试 Selenium | 更新日期: 2023-09-27 17:49:18

我有一个网站,用户可以发送他的照片到一个比赛。他点击从磁盘中选择文件并使用Firefox发送。

我想测试我的形式与c#硒。我知道有一种方法可以发送本地文件路径到输入文件,但我想测试它包括Windows 7文件打开对话框。

我已经写了测试,点击一个按钮打开文件对话框,并执行以下代码,在文件上传对话框中设置本地文件的路径:

System.Windows.Forms.SendKeys.SendWait(localFile);
Thread.Sleep(1500);
System.Windows.Forms.SendKeys.SendWait("{ENTER}");

当我在Windows上测试我的配置文件时,它工作正常。但我有另一个配置文件在Windows上的网站测试正在运行。因此,我使用我的个人配置文件来使用Windows,并在第二个配置文件上运行测试。当我设置测试在我的第二个配置文件上执行时,它没有正确执行。

当我切换到这个配置文件时,我看到一个对话框窗口,当我切换到配置文件时,localFile url被输入到文件对话框中。当我在执行测试的配置文件中不活跃时,SendWait似乎不起作用。

所以我的问题是:如何做,使测试处理文件对话框正确的配置文件我不活跃时,测试执行?

Selenium测试停止在文件选择表单上执行

基本上,原生Selenium支持的上传工作方式更简单:

  • 你应该找到元素"input[type='file']
  • 调用inputFileElement.SendKeys (fullPathToFile)

fullfilePath可以是任何有效的windows路径或网络共享

假设您的意思是这些测试在同一台机器上的另一个帐户和另一个桌面上运行,那么很有可能这个问题是由SendInput(它由SendKeys内部使用)的工作方式引起的-它似乎只在当前活动的桌面上工作。

我找不到MS关于这部分的任何可靠文档,但这是合乎逻辑的,这个答案(在一个有点不同的问题上)说

严重依赖底层的Win32 SendInput API。这不会当桌面处于非活动状态时,完全可以进行键盘输入。

或者它可能是因为你的测试基础设施是如何设置的(也许它是一个非交互式服务- https://blogs.msdn.microsoft.com/patricka/2010/04/27/what-is-interactive-services-detection-and-why-is-it-blinking-at-me/,没有绑定到任何桌面)。

如果当前活动桌面是原因,那么替代方案是:

  1. 独立的测试机,可能是虚拟的(从这个和其他角度来看,这是最好的解决方案-应该努力不在自己的机器上测试任何东西)
  2. 尝试PostMessage -这应该是独立于活动的桌面问题-你有窗口句柄-你向它发送消息,尽管其他问题可以与它一起出现。
  3. 尝试System.Windows.Automation直接更改控件(我想它不应该使用SendInput或类似的)。
  4. 键盘驱动程序-也许它可以克服这些问题,或者也许不是-应该研究。