我制作了一个Windows窗体应用程序来托管我的GUI以运行selenium测试。
当用户按下“运行测试”按钮时,它会启动一个chromedriver实例并运行所选的硒测试。
但是,假设在测试运行时,用户决定要停止测试,或者根本没有完成测试。
我在表单上有一个按钮,调用FixtureTearDown()以防万一发生这种情况。 FixtureTearDown就是:
if (_driver != null) _driver.Quit();
但是,如果你按下这个“停止测试”按钮,驱动程序会关闭,但是selenium测试会继续执行脚本,就像webdriver仍然打开一样,然后会抛出错误(因为它无法找到元素,因为驱动程序已关闭,duh)并导致我的Windows窗体应用程序崩溃。
那么,有没有办法优雅地停止运行selenium脚本?在此先感谢您的帮助,如果这是一个愚蠢的问题,我道歉,我仍然对selenium和c#一般都是新手。
答案 0 :(得分:1)
好吧,我明白了。这可能不是很好的做法,但它可以做我需要做的事情。
在每个测试方法中,我将目标线程设置为即将开始的当前线程
Thread targetThread = Thread.CurrentThread;
然后,在"停止测试"单击,结束线程。
public void haltScript()
{
targetThread.Abort();
}
就像一个魅力。
答案 1 :(得分:0)
function removeNthSpace(str, n) {
var spacelessArray = str.split(' ');
return spacelessArray
.slice(0, n - 1) // left prefix part may be '', saves spaces
.concat([spacelessArray.slice(n - 1, n + 1).join('')]) // middle part: the one without the space
.concat(spacelessArray.slice(n + 1)).join(' '); // right part, saves spaces
}
将 NOT 停止执行测试。它将继续,直到所有测试都在类/套装中执行完毕,具体取决于您的设置方式。该部分通常由测试运行员处理。调用测试运行器使用的机制来停止从您创建的应用程序执行测试。
答案 2 :(得分:0)
这是我的建议。
1)您可以设置公共“flag”变量,如布尔值。开始测试时,它将设置为false。 “停止测试”按钮将其设置为true。在测试运行时,应检查其值是否正确。如果为true,它将退出测试脚本。
2)您可以将其设置为在不同的线程上运行。然后,“停止测试”将停止运行测试的线程。
您可以在此处参考:https://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.90).aspx进行设置。
希望这有帮助。