2015-05-06 53 views
1

我制作了一个Windows窗体应用程序来托管我的GUI来运行硒测试。如何在webdriver.quit()之后停止运行硒测试?

当用户按下“运行测试”按钮时,它将启动一个chromedriver实例并运行所选的硒测试。

但是,让我们假设在测试运行时,用户决定他们想要停止测试,或者完全不运行整个测试。

我在调用FixtureTearDown()的窗体上有一个按钮,以防发生这种情况。 FixtureTearDown很简单:

if (_driver != null) _driver.Quit(); 

但是,如果你不按这个“停止测试”按钮,驾驶者关闭,但硒测试持续执行脚本仿佛webdriver的仍然是开放的,然后抛出错误(因为它无法找到元素,因为驱动程序已关闭,嗯)并导致我的Windows窗体应用程序崩溃。

那么,有没有办法优雅地停止硒脚本的运行?在此先感谢您的帮助,并且我很抱歉如果这是一个愚蠢的问题,我仍然对硒和c#一般都不熟悉。

回答

0
webDriver.Quit(); 

停止测试的执行。它会一直持续下去,直到所有的测试都在班级/套装中执行完毕,具体取决于你的设置。这部分通常由测试运动员处理。调用测试运行器使用的机制,以停止您创建的应用程序执行测试。

+0

是的,我知道webdriver.quit不会停止测试的执行。这就是为什么我问这个问题!你说“调用测试运行器用于停止测试的机制”,但我没有任何机制。这就是我问的,我可以用什么机制来阻止脚本的运行? – kdeez

+0

@kdeez正如我所说,这取决于你正在使用什么样的测试亚军。例如,我使用RSharper,有时使用NUnit Test runner来进行我的测试。可能是指您正在使用的测试运行器的api文档,并调用api来停止您创建的应用程序的执行 – Saifur

0

嗯,我明白了。这可能不是一种好的做法,但它可以满足我的需求。

在每个测试方法我设定的目标线程当前线程这是即将开始

Thread targetThread = Thread.CurrentThread; 

,然后,在“停止测试”点击,结束线程。

public void haltScript() 
    { 
     targetThread.Abort(); 
    } 

工程就像一个魅力。

0

这是我可以建议的。

1)您可以设置一个公共“标志”变量,如布尔值。当您开始测试时,它将被设置为false。按钮“停止测试”将其设置为true。当你的测试正在运行时,它应该检查它的值。如果为true,它将退出测试脚本。

2)你可以设置它在不同的线程上运行。然后“停止测试”将停止测试运​​行的线程。

你可以在这里参考:https://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.90).aspx设置它。

希望这会有所帮助。