我知道这个问题已经解决了很多,但我没有发现类似于我的问题,所以请告诉我是否有解决方案。
我正在使用selenium webdriver(chrome)和C#来测试Web应用程序。 在应用程序中,我有一个按钮,它打开一个Windows文件对话框,以便选择和上传文件。
我使用Click()单击按钮,SendKeys()将文件的路径粘贴到Windows对话框中并点击“Enter”。 我不是想用selenium来控制对话。 它在大多数情况下都是成功的,但是有时单击按钮时对话框不会打开,并且它似乎被冻结了几分钟(也无法手动单击按钮),但测试会恢复,就像对话框一样被打开了。 2-3分钟后,窗口对话框终于出现,但不用说整个测试都搞砸了。 这不是程序本身的问题,因为当手动执行点击时,问题永远不会发生。
可能是什么问题,我该如何解决? 请记住,我无法更改我正在测试的程序。
谢谢
答案 0 :(得分:1)
您可以直接使用Microsoft UI Automation而不使用White。
没有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);
答案 1 :(得分:0)
如果您创建等待对话框怎么办?
public void waitForElement()
{
while(!yourDialogElement.Displayed)
{
yourButtonElement.Click()
System.Threading.Thread.Sleep(1000) // sleep for 1000 milliseconds
}
}
您可能希望在该按钮单击中构建一个try / catch,并且可能在您的循环中构建一个计数器并传递超时限制。
让我知道这是否有效或者您是否需要更多帮助!
答案 2 :(得分:0)
您应该考虑在框架中添加一个名为WHITE的库。这类似于Selenium,但对于Win32应用程序,可以通过Microsoft UI Automation处理大多数类型的Windows对话框对象。
设置WHITE后,您可以在代码中添加一个方法,Selenium点击按钮打开对话框窗口。此方法可以轮询对话框的存在,并且如果在设定的时间之后窗口没有出现,则可能无法在那里进行测试,然后再尝试再次单击该按钮。
如果您确信它始终存在,您也可以无限期地轮询,直到窗口出现。我会设置一个上限自己,但到5分钟,或者你觉得这是什么,以防止某种无限循环情况。