【问题标题】:Opening windows file dialog with selenium用 selenium 打开 windows 文件对话框
【发布时间】:2016-03-14 23:17:18
【问题描述】:

我知道这个问题已经解决了很多,但我还没有发现与我类似的问题,所以请告诉我是否有解决方案。

我正在使用 selenium webdriver (chrome) 和 C# 来测试 Web 应用程序。 在应用程序中,我有一个按钮,它打开一个 Windows 文件对话框,以便选择和上传文件。

我正在使用 Click() 单击按钮并使用 SendKeys() 将文件的路径粘贴到 Windows 对话框中并按“Enter”。 我不想用硒控制对话。 大部分时间都是成功的,但是有时单击按钮后对话框没有打开,并且似乎冻结了几分钟(也无法手动单击按钮),但是测试继续进行,就好像对话框有被打开。 2-3 分钟后,windows 对话框终于出现了,但不用说整个测试搞砸了。 这不是程序本身的问题,因为手动执行单击时不会出现问题。

可能是什么问题,我该如何解决? 请记住,我无法更改我正在测试的程序。

谢谢

【问题讨论】:

    标签: c# windows google-chrome selenium


    【解决方案1】:

    您可以在没有 White 的情况下直接使用 Microsoft UI 自动化来做到这一点。

    没有 TestStack White。 将整个库用于一个窗口自动化是没有意义的。白色只是包装。

    var FirefoxWindowElement = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty,"MozillaWindowClass"));
    FirefoxWindowElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty,"#32770"))
    //You can navigate directly to input field or just use the keyboard because input field is always focussed
    SendKeys.SendWait("YOUR FILE PATH here");
    Keyboard.Press(Key.Return);
    

    【讨论】:

      【解决方案2】:

      您应该考虑在您的框架中添加一个名为 WHITE 的库。这类似于 Selenium,但适用于 Win32 应用程序,并且可以通过 Microsoft UI 自动化处理大多数类型的 Windows 对话框对象。

      设置 WHITE 后,您可以在代码中单击按钮的位置添加一个方法,该按钮被 Selenium 单击以打开对话框窗口。此方法可以轮询对话框的存在,如果在设定的时间后没有出现该窗口,您可以在那里测试失败,然后再次尝试单击该按钮。

      如果您确信它总是会出现,您也可以无限期地轮询直到窗口出现。我会自己设置一个上限为 5 分钟或任何你觉得就在这里的东西,以防止某种无限循环的情况。

      【讨论】:

      • 这似乎是一个完美的解决方案,但我无法找到一种方法来“捕捉”刚刚打开的对话框,而没有它的名称或触发它的应用程序。关于如何做到这一点的任何想法?
      • 您需要一种方法来识别对话框吗?下载用作对象间谍的 VisualVerify(Microsoft 工具)。它将允许您检查对话框并找到可用于使用 WHITE 识别它的属性 - uiautomationverify.codeplex.com
      【解决方案3】:

      如果您创建一个等待对话框怎么办?

              public void waitForElement()
          {
              while(!yourDialogElement.Displayed)
              {
      
                  yourButtonElement.Click()
                  System.Threading.Thread.Sleep(1000) // sleep for 1000 milliseconds
      
              }
          }
      

      您可能希望在该按钮单击中构建一个 try/catch,并可能在您的循环中构建一个计数器并通过超时限制。

      让我知道这是否有效或者您需要更多帮助!

      【讨论】:

      • 感谢您的回答,但问题是这不是 Windows 应用程序,所以我无法访问这样的对话框。我仍在寻找一种访问它的方法。此外,当对话框尚未显示时,我无法再次单击该按钮 - 正如我所提到的,它已完全冻结。我想过添加一个循环来等待对话框,但我找不到检查它是否显示的方法。再次感谢。
      猜你喜欢
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2019-08-20
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多